{"deployed":[{"deployed_at":"2023-08-30T18:33:35.223Z","entries":[{"pr":3216,"summary":"Increase density of events shown on Vacuum Timeline for multi-day time selections","channels":["enterprise-server","cloud"],"description":null},{"pr":3218,"summary":"Improve time range selection handling on charts","channels":["enterprise-server","cloud"],"description":"If selecting a time range right up against the edge of a chart, it was\neasy to lose the selection previously, since it would be cleared immediately\nwhen the mouse left the chart area.\n\nNow we give a small grace period before clearing the selection, making it\neasier to select right up to the available data."},{"pr":3174,"summary":"Schema Statistics: Add index scans per minute stats in the Indexes tab in Schema Statistics page","channels":["enterprise-server","cloud"],"description":"This scans per minute stats is calculated using last 24 hours data. You can view the data for index scans per minute over time on the index details page."},{"pr":3190,"summary":"Support setting a default role for new members onboarded via SAML","channels":["enterprise-server","cloud"],"description":"Previously, \"View & Modify (All Servers)\" role was assigned to any new members onboarded via SAML and there was no way to change this behavior. With this change, the default role can be set during the integration setup. It also can be updated to any member roles of the organization from the Integrations tab in the Settings page."},{"pr":2976,"summary":"Index Advisor: Fix column finding problem due to the table referenced wrongly","description":"This fixes errors like `column \"column_1\" does not exist`, when there are several tables with the same name and one table does not have \"column_1\".","channels":["enterprise-server","cloud"]},{"pr":3176,"summary":"Update bundled collector from 0.51.0 to 0.51.1","channels":["enterprise-server"],"description":null},{"pr":2972,"summary":"Alerts & Check-Up: Fix addition of more matching PIDs after connection-related alerts are triggered","description":"Due to a bug in the handling of connection related alerts (Active Queries, Idle Transactions or Blocking Queries), the list of references for each issue which highlights the specific PIDs that were matched by the alert was not correctly updated if additional PIDs were found that matched the condition after the issue was first detected.\n\nThis did not affect the state of the issue overall, just the display of connections and their PIDs on the issue page, which may have sometimes been incomplete, or empty due to this bug.","channels":["enterprise-server","cloud"]},{"pr":3167,"summary":"Index Advisor: Fix sorting of unused indexes for which an index write overhead could not be calculated","channels":["enterprise-server","cloud"],"description":null},{"pr":3166,"summary":"Update bundled collector from 0.50.1 to 0.51.0","channels":["enterprise-server"],"description":"Relevant changes from [CHANGELOG](https://github.com/pganalyze/collector/blob/main/CHANGELOG.md#0510------2023-08-12):\n\n* Autovacuum:\n  - Add support for updated log format in Postgres 15+\n  - Remember unqualified name for \"skipping vacuum\" log events\n  - Add more cases for \"canceling autovacuum task\" log context line\n  - Track n_ins_since_vacuum value to determine when insert-based autovacuum was triggered\n* AWS Aurora: Correctly detect Aurora reader instances as replicas\n* Self-managed servers: Use log_timezone setting to determine log timezone if possible"},{"pr":3138,"summary":"VACUUM Advisor: Improve performance of loading xmin horizon data","channels":["enterprise-server","cloud"],"description":null},{"pr":3151,"summary":"Log Insights: Fix log details rendering error with logs contain index vacuum information","description":null,"channels":["enterprise-server","cloud"]},{"pr":3147,"summary":"Query analysis: Support queries containing COALESCE and other expressions in the LIMIT clause","description":null,"channels":["enterprise-server","cloud"]},{"pr":3133,"summary":"Add inserted rows graph to VACUUM Activity of the Schema Statistics page","channels":["enterprise-server","cloud"],"description":"Starting from Postgres 13, autovacuum is triggered based on the number of rows inserted since a table was last vacuumed. Currently, the VACUUM/ANALYZE Activity tab of the Schema Statistics page shows the graph illustrating the number of dead rows along with its corresponding autovacuum threshold, as well as the oldest unfrozen XID age along with its corresponding autovacuum threshold. These graphs have been useful to correlate the VACUUM activity over time.\nThe introduction of the graph of inserted rows (since a table was last vacuumed) along with its corresponding autovacuum threshold provides a comprehensive overview of how autovacuum is triggered.\n\n![image](https://d1amgrxiy6p5ue.cloudfront.net/entries/pr-3133-d82626d82c0cc608dc516904846f4a80947eb5ba/assets/77806e8d-0420-462f-97b8-ec3852645444)"},{"pr":3139,"summary":"Index Advisor: Improve handling of check constraints","description":"Allow Index Advisor to process schemas containing more CHECK\nconstraints, including constraints marked as NOT VALID.","channels":["enterprise-server","cloud"]},{"pr":3136,"summary":"Enterprise Server: Allow trailing slash in AWS_S3_SNAPSHOTS_PREFIX and AWS_S3_LOGS_PREFIX","description":"When configuring these variables a trailing slash will now be accepted\n(but not required). A trailing slash makes no semantic difference here\nbut may be more natural for some users.","channels":["enterprise-server"]},{"pr":3137,"summary":"VACUUM Advisor: Move issue indicator on bloat tab table listing to settings columns","description":"Previously, tables in this list that have an open VACUUM Advisor bloat\nissue would be flagged with an info icon in the 'Est. Bloat' column,\nand other tables would be flagged with a checkmark to indicate there\nis no open issue.\n\nHowever, this could be misconstrued to mean that the bloat on these\ntables is not a problem. This is not necessarily the case: The\nInsufficient VACUUM Frequency check only looks for _growth_ in bloat,\nnot the absolute level of bloat. Tables could still have a problematic\namount of bloat without an open issue.\n\nMoving the icons to the settings columns makes it clearer that the\ncheck is focused on verifying whether these VACUUM settings are\nadequate, and not on checking the absolute level of bloat.","channels":["enterprise-server","cloud"]},{"pr":3094,"summary":"VACUUM Advisor: store the xmin assigned at time in postgres_server_stats_35d during the snapshot processing","description":null,"channels":["enterprise-server","cloud"]},{"pr":3123,"summary":"VACUUM Advisor: track how many inserts happened since the last vacuum (n_ins_since_vacuum)","description":null,"channels":["enterprise-server","cloud"]},{"pr":3129,"summary":"Query Performance: Fix loading time issue for servers with a lot of roles","description":null,"channels":["enterprise-server","cloud"]},{"pr":3084,"summary":"getIssues API: Allow returning null for issue reference (legacy API)","description":"The new \"VACUUM: Bloat - VACUUM Blocked by Xmin Horizon\" check may in some cases not have any attached issue references, which will cause the legacy \"reference\" issue field to be null.\n\nThis is an API breaking change, since the field was previously considered non-nullable. Please note that if you are currently using the \"reference\" and \"displayName\" fields of the \"getIssues\" API that they are deprecated, and we require all API users to migrate to the \"references\" field by May 2024: https://pganalyze.com/docs/api/queries/getIssues","channels":["enterprise-server","cloud"]},{"pr":3077,"summary":"Enterprise Server: Increase minimum supported Postgres version from 10 to 11 for hosting pganalyze itself","description":null,"channels":["enterprise-server"]},{"pr":3081,"summary":"VACUUM Advisor: Fix rendering of Inefficient Index Phase issue pages","description":null,"channels":["enterprise-server","cloud"]},{"pr":3068,"summary":"VACUUM Advisor: allow filtering of table lists on bloat and performance tabs","description":null,"channels":["enterprise-server","cloud"]},{"pr":3015,"summary":"Rename Index Advisor Opportunities to Insights","description":"This is only a terminology change to be consistent with other upcoming\npganalyze features. The actual Index Advisor functionality is not\nchanging.","channels":["enterprise-server","cloud"]},{"pr":2964,"summary":"Index Advisor: Fix support for handling functions that call citext input/output functions","description":"Fixes an edge case where query analysis would fail to handle a schema that included a function that does a comparison with a citext column and a constant value (i.e. a fixed text string, not a parameter).","channels":["enterprise-server","cloud"]},{"pr":2985,"summary":"Enterprise Server: Update bundled collector version to release 0.50.1","description":"This is primarily a bugfix release in the context of an Enterprise Server installation using the bundled collector to monitor a self-managed or Amazon RDS/Aurora database server. In case you have installed the collector separately, we recommend upgrading the collector package/container and reviewing the [full changelog](https://github.com/pganalyze/collector/blob/main/CHANGELOG.md#0501------2023-06-29).","channels":["enterprise-server"]},{"pr":2968,"summary":"Index Advisor: Support schemas that require custom functions in check constraints/domain types","description":null,"channels":["enterprise-server","cloud"]},{"pr":2959,"summary":"Index Advisor: Fix incorrect method/costs shown for scans on query details","description":"This bug caused the scan list to pull in costs and methods from other queries in the same database on the same table, that had an identical scan (i.e. same set of WHERE/JOIN conditions). Whilst this information was not utilized for index recommendations, it may have been misleading when reading the scan information on the query details page.","channels":["enterprise-server","cloud"]},{"pr":2962,"summary":"Query and table overview: Fix edge case that accidentally counted the same timeseries data point twice","description":"This edge case only occurred when viewing a very short time frame (2 hours or less), within certain conditions. If the error occurred, you might have seen the \"% of Total Runtime\" sum up to more than 100%, or other summary statistics to be higher than what you would get when viewing the detail statistics individually.","channels":["enterprise-server","cloud"]},{"pr":2900,"summary":"Index Advisor: Fix some cases of query analysis error \"view depth limit (10) exceeded\"","description":"This fixes an edge case that caused Index Advisor to fail for particular queries, due to a table and a view having the exact name, but different schemas, with the view referencing the table of the same name. This then lead to the error \"view depth limit (10) exceeded\" showing for the query.\n\nWith this fix this error should be resolved, and the affected queries included in Index Advisor. Existing queries that failed due to this error will be reprocessed. If you continue to see this error after this change you may have an actual deeply nested view hierarchy that is not supported by Index Advisor at this point.","channels":["enterprise-server","cloud"]},{"pr":2937,"summary":"Index Advisor: Add support for IMMUTABLE function","description":"This fixes errors like \"functions in index expression must be marked IMMUTABLE\" or \"functions in partition key expression must be marked IMMUTABLE\".","channels":["enterprise-server","cloud"]},{"pr":2946,"summary":"Enterprise Server: Update Rails for [CVE-2023-28362](https://discuss.rubyonrails.org/t/cve-2023-28362-possible-xss-via-user-supplied-values-to-redirect-to/83132)","description":null,"channels":["enterprise-server"]},{"pr":2932,"summary":"Update query text unavailable error message to explain how to fix the problem queries","description":null,"channels":["enterprise-server","cloud"]},{"pr":2917,"summary":"Update and sync Postgres setting config group (shown in Config Tuning page) with Postgres 15","description":null,"channels":["enterprise-server","cloud"]},{"pr":2916,"summary":"Index Advisor: Fix INSERT INTO SELECT errors by ensuring correct column order for query analysis","description":"This fixes type coercion errors like \"column \"X\" is of type A but expression is of type B\" on specific cases of INSERT INTO SELECT statements that relied on the column positions of the target table.","channels":["enterprise-server","cloud"]},{"pr":2915,"summary":"Index Advisor: Fix analysis error when foreign key constraint tables have indexes using custom functions","description":null,"channels":["enterprise-server","cloud"]},{"pr":2913,"summary":"Index Advisor: Add support for analyzing queries that require the \"ltree\" extension","description":null,"channels":["enterprise-server","cloud"]},{"pr":2888,"summary":"Show full query text instead of truncated one-line query for issue pages of Active Queries and Blocking Queries checks","description":null,"channels":["enterprise-server","cloud"]},{"pr":2905,"summary":"Move autovacuum_vacuum_insert_threshold and autovacuum_vacuum_insert_scale_factor from Other Settings config group to Autovacuum config group","description":null,"channels":["enterprise-server","cloud"]},{"pr":2892,"summary":"Increase Connection Traces live refresh timeout from 1 to 5 minutes","description":null,"channels":["enterprise-server","cloud"]},{"pr":2884,"summary":"Enterprise Server: Update bundled collector version to release 0.50.0","description":"This is primarily a bugfix release in the context of an Enterprise Server installation using the bundled collector to monitor a self-managed or Amazon RDS/Aurora database server. In case you have installed the collector separately, we recommend upgrading the collector package/container and reviewing the [full changelog](https://github.com/pganalyze/collector/blob/main/CHANGELOG.md#0500------2023-06-05).","channels":["enterprise-server"]},{"pr":2797,"summary":"Enterprise Server: Allow setting SIDEKIQ_CONCURRENCY=0 to turn off workers in combined Enterprise image","description":"You can utilize this setting in order to separate the workers from the container servicing the pganalyze web UI, avoiding slow web requests caused by worker processing. Note such a setup requires having configured object storage as well as an external Redis server (set via REDIS_URL).","channels":["enterprise-server"]}]},{"deployed_at":"2023-09-01T00:39:33.411Z","entries":[{"pr":3224,"summary":"VACUUM Activity: Update lane label for manual VACUUMs in VACUUM Timeline","channels":["enterprise-server","cloud"],"description":"Previously, manual VACUUMs in VACUUM Timeline labeled the lane with an internal identifier. Instead, use the VACUUM PID and add the prefix \"vacuum\" to make it clear that the lane is for manual VACUUMs (not autovacuums)."}]},{"deployed_at":"2023-09-06T09:30:01.830Z","entries":[]},{"deployed_at":"2023-09-13T06:18:58.872Z","entries":[{"pr":3253,"summary":"VACUUM Advisor: Use the oldest available transaction ID assigned at time when the corresponding assigned at time of the xmin horizon is not found","channels":["enterprise-server","cloud"],"description":"Previously, when the assigned at time of the xmin horizon was not found within the stored statistics, we didn't try to calculate the xmin horizon assigned at time and treated it as data not available. With this fix, we use the oldest available transaction ID assigned at time whenever there is the xmin horizon but the corresponding assigned at time is not found.\nThis will help to trigger [the VACUUM Blocked by Xmin Horizon check](https://pganalyze.com/docs/checks/vacuum/xmin_horizon) properly moving forward with such cases."}]},{"deployed_at":"2023-09-14T06:57:57.243Z","entries":[{"pr":3261,"summary":"GraphQL API: Add additional filter options for getServers","channels":["enterprise-server","cloud"],"description":"This adds the following optional arguments:\n\n- withRecentData (boolean, filters for servers that have received data in the last 24 hours)\n- systemType (string, API system type set by the collector)\n- systemScope (string, API system scope set by the collector)\n- systemId (string, API system ID set by the collector)\n\nThese can be used to either locate a specific server based on the API type/scope/id, or to check which servers may have integration issues, by virtue of not having recent data."}]},{"deployed_at":"2023-09-19T01:34:16.598Z","entries":[{"pr":3273,"summary":"Fix loading of query stats when a query cannot be tied to a Postgres","channels":["enterprise-server","cloud"],"description":"role"}]},{"deployed_at":"2023-09-19T03:44:11.115Z","entries":[{"pr":3219,"summary":"Query Performance: Include query tags in header of query detail page","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2023-09-21T02:10:58.927Z","entries":[{"pr":3283,"summary":"Alerts & Check-Up: Make email notification available for High Replication Lag alert","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2023-10-03T01:23:07.703Z","entries":[{"pr":3327,"summary":"Query overview statistics: Show summary entry with runtime as 0.0 if no queries have run","channels":["enterprise-server","cloud"],"description":"Previously, in cases where no queries occurred within a given 1 minute time window, the pganalyze UI would indicate that data was missing (with a grey dashed background) in the Query Performance overview. Whilst unlikely to occur on production databases, this situation can easily happen in staging/dev/QA environments.\n\nIn order to avoid confusion, this changes the overview graph to show 0.0 as the median/95th/... runtime in such situations. If there is indeed a data problem (i.e. collector not sending statistics snapshots due to an error) the missing data indicator will be shown."}]},{"deployed_at":"2023-10-03T21:27:33.274Z","entries":[{"pr":3329,"summary":"Timeseries graphs: Fix client-side cache keys to avoid stale data when switching objects","channels":["enterprise-server","cloud"],"description":"In certain circumstances, a bug with the client-side caching key caused stale data to be shown on a subsequent request that was getting the same type of time series data with the same start/end timestamps. For example, this might have caused the query overview statistics graph on the Query Performance page to show the data from a previous database or server that was already visited in the same browser session of the same user, when navigating to a different database. The correct data would have shown when doing a full page refresh in the browser.\n\nThis bug was limited to showing stale data on the client side, and did not permit any access to data the user\ndid not already have access to."}]},{"deployed_at":"2023-10-05T05:53:14.722Z","entries":[{"pr":3336,"summary":"Query details page: Show IN/VALUES lists with multiple parameters as ($0) instead of (?)","channels":["enterprise-server","cloud"],"description":"To make long query texts easier to read pganalyze simplifies the query text on display. This changes the replacement character used for multi-value IN or VALUES lists from \"?\" to \"$0\" to keep the resulting query text parseable, and to fix syntax highlighting for such queries."}]},{"deployed_at":"2023-10-05T15:55:18.420Z","entries":[{"pr":3333,"summary":"OpenTelemetry integration: Add support for query sample links constructed by collector for OTel tracing spans","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2023-10-05T22:46:21.213Z","entries":[{"pr":3344,"summary":"Update bundled collector for Enterprise Server containers to 0.52.0","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2023-10-11T15:29:46.687Z","entries":[{"pr":3345,"summary":"Workers: Allow snapshots up to 500MB size to be processed","channels":["enterprise-server","cloud"],"description":"This raises the maximum size limit for snapshots from 200MB to 500MB, which can be necessary for certain use cases involving a lot of tables.\n\n$channels: enterprise-server"}]},{"deployed_at":"2023-10-12T16:02:30.616Z","entries":[{"pr":3361,"summary":"Exclude Google Cloud SQL setting from \"Config - Disabled features\" check","channels":["enterprise-server","cloud"],"description":"The Alerts & Check-Up system's [Config - Disabled\nfeatures](https://pganalyze.com/docs/checks/settings/enable_features)\ncheck warns about disabled planner features. However, for Postgres\nservers on Google Cloud SQL, it could also spuriously warn about the\n`enable_google_stats_collection` setting, since it follows the planner\nsetting naming convention.\n\nThe setting has now been excluded from the check and will be ignored."}]},{"deployed_at":"2023-10-12T22:28:31.178Z","entries":[{"pr":3362,"summary":"Fix test snapshot server URL when DOMAIN_NAME is not set","channels":["enterprise-server"],"description":"Previously, despite pointing the collector to a pganalyze Enterprise Server installation, one might have seen server URLs returned that start with \"app.pganalyze.com\". This occurred only when the DOMAIN_NAME setting was not set. Going forward, this will instead return the hostname used in the request to the test snapshot endpoint as a fallback."}]},{"deployed_at":"2023-10-19T16:52:50.616Z","entries":[{"pr":3340,"summary":"Improve guidance when a query has no query samples","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2023-10-20T04:39:20.804Z","entries":[{"pr":3384,"summary":"Query Analysis: Include outdated index scan information in output, and flag as \"Index Scan using \\<unknown index\\>\"","channels":["enterprise-server","cloud"],"description":"Sometimes, due to bugs in the processing logic, or other problems, the scan data on a given table or query can become stale. In such situations the lookup of which index a particular scan refers to may fail. Previously such scans were ignored in parts of the system, but not in others. For consistency, and to flag such problems more clearly, always show such scans, but use the special scan method \"Index Scan using \\<unknown index\\>\" to make it apparent the data is stale.\n\nTo fix, query analysis needs to be re-run on affected queries, which will re-analyze the indexes that are available for use by a given query, using current schema information. This will usually resolve itself, but if it doesn't, please open a support ticket to request a re-analysis of the affected queries."}]},{"deployed_at":"2023-10-20T07:41:17.629Z","entries":[{"pr":3385,"summary":"Query analysis: Remove scan information when invalidated due to schema changes","channels":["enterprise-server","cloud"],"description":"Previously, the query analysis process that finds the scans in a given query, would only add new information into the system (such as an index that got added), but never remove it. This would cause incorrect data to show, for example when indexes get removed, or other schema information changed that caused a scan method to no longer apply. Additionally, in situations where the query analysis logic itself changed, this may have cause duplicate scans to show on the same query.\n\nThis fix will be applied when each query is re-analyzed. To accelerate re-analysis, for example when seeing incorrect data, please reach out to support to request a given set of queries to be re-analyzed right away."}]},{"deployed_at":"2023-10-25T17:11:19.696Z","entries":[{"pr":3390,"summary":"Xmin horizon check: Correctly handle servers with stale statistics data","channels":["enterprise-server","cloud"],"description":"Previously we may have triggered the Xmin horizon alert incorrectly when a server stopped sending data to pganalyze, since the reference time used for comparison was the time the check was run, not the time data was last received."}]},{"deployed_at":"2023-10-30T18:20:22.102Z","entries":[{"pr":3383,"summary":"Improve fetching log lines associated with a backend","channels":["enterprise-server","cloud"],"description":"The Backend Details view (available from the Connections page) can\nsometimes include associated log lines in the log line count, but\ninadvertently exclude them when fetching the actual log lines. This\nfixes these discrepancies."}]},{"deployed_at":"2023-11-15T17:37:29.833Z","entries":[{"pr":3468,"summary":"Improve handling of unique index constraints in UI","channels":["enterprise-server","cloud"],"description":"In some situations, unique indexes in Postgres do not get entries in\nthe\n[pg_constraint](https://www.postgresql.org/docs/current/catalog-pg-constraint.html)\ncatalog table that normally tracks constraints. Since `pg_constraint`\ninformation was used to display information about constraints in\npganalyze, this could lead to some indexes not being flagged as unique\nin the per-table index listing (they would still appear correctly on\nthe individual index detail page) and their constraints being omitted\nin the per-table constraint listing.\n\nUpdate the logic to always treat unique indexes as constraints."}]},{"deployed_at":"2023-11-17T01:49:45.076Z","entries":[{"pr":3469,"summary":"Query Details: Add a hint when a query is truncated","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2023-11-29T01:27:07.882Z","entries":[{"pr":3484,"summary":"Index Advisor: Correctly use scans from tables with camelCase names or special characters","channels":["enterprise-server","cloud"],"description":"Previously Index Advisor was not able to correctly load scans if the table name contained uppercase letters, special characters or other cases where additional quoting of the table name was required. This may have resulted in no index recommendations showing, even if there were missing indexes."}]},{"deployed_at":"2023-11-30T02:46:58.330Z","entries":[{"pr":3485,"summary":"System: Show cluster information in the Server Info panel for Crunchy Bridge servers","channels":["enterprise-server","cloud"],"description":"When the cluster information of Crunchy Bridge servers is passed from the collector, show them in the Server Info panel in the System Overview page."}]},{"deployed_at":"2023-11-30T19:54:39.690Z","entries":[{"pr":3490,"summary":"Add n_distinct values from pg_stats to Schema Statistics page","channels":["enterprise-server","cloud"],"description":"This is now available on the Columns tab of the table detail page when\nviewing a specific table. It shows how many distinct values are\nestimated to be in a given column."}]},{"deployed_at":"2023-12-02T01:01:37.416Z","entries":[{"pr":3501,"summary":"Update expandable panels to open when clicking on the title","channels":["enterprise-server","cloud"],"description":"Some panels within pganalyze are collapsed by default, and include a\ncaret in the title bar to expand them. These panels can now also be\nexpanded by clicking on their title."}]},{"deployed_at":"2023-12-04T03:16:39.590Z","entries":[{"pr":3497,"summary":"Schema Statistics: Introduce VACUUM Simulator","channels":["enterprise-server","cloud"],"description":"VACUUM Simulator lets you tweak autovacuum settings to learn the relation between settings and autovacuum patterns. It also helps you finding better autovacuum settings for the table.\nThis feature is available in the individual table statistic page in the Schema Statistics page."}]},{"deployed_at":"2023-12-04T22:38:53.520Z","entries":[{"pr":3502,"summary":"Fix background scrolling under Get Help overlay panel","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2023-12-09T11:29:09.143Z","entries":[{"pr":3506,"summary":"Enterprise Server: Add optional support for AWS_ASSUME_ROLE to access AWS S3 and KMS","channels":["enterprise-server"],"description":"When deploying pganalyze Enterprise Server on AWS, it can sometimes be necessary to run the container in a different AWS account than the S3 buckets and KMS key provisioned for it.\n\nIn such situations an explicit `sts:AssumeRole` call is needed to allow successful access. To enable this, set the new `AWS_ASSUME_ROLE` setting, pointing to the ARN of the IAM role to be assumed.\n\nNote that this setting will also be used as the default by the bundled collector that runs in the Enterprise image (see https://pganalyze.com/docs/collector/settings#aws-settings), but can be overwritten on a per-server basis by changing the AWS-specific server settings in the pganalyze UI."}]},{"deployed_at":"2023-12-09T23:02:58.971Z","entries":[{"pr":3519,"summary":"Schema Statistics: Show correct scan method for queries with set returning functions in the SELECT targetlist","channels":["enterprise-server","cloud"],"description":"Previously queries that contained a set returning function (SRF) in the target list did not get processed correctly, and\ncaused the Scans list on the Queries tab of the individual per-table Schema Statistics pages to error out."}]},{"deployed_at":"2023-12-10T02:24:17.297Z","entries":[{"pr":3521,"summary":"Schema statistics: Improve performance of loading scans list","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2023-12-11T17:27:13.254Z","entries":[{"pr":3518,"summary":"Schema Statistics: Fix distinct value count for some columns","channels":["enterprise-server","cloud"],"description":"Columns whose distinct value count was expected to grow with table row\ncount could previously show an incorrect distinct value count. This\nchange corrects that issue and flags such values in the table. It also\nadds the total row count to the tooltip for this field to make it\neasier to interpret the value."}]},{"deployed_at":"2023-12-11T20:37:19.060Z","entries":[{"pr":3522,"summary":"Query analysis: Fix errors loading system functions like \"make_interval\" on PG 14+","channels":["enterprise-server","cloud"],"description":null},{"pr":3520,"summary":"Query analysis: Add support for \"Tid Scan\" node types","channels":["enterprise-server","cloud"],"description":"When a query queries the internal \"ctid\" column, query analysis would previously fail, since we did not correctly recognize the special \"Tid Scan\", which indicates that Postgres does a lookup based on the given internal tuple (row version) location."}]},{"deployed_at":"2023-12-12T03:23:45.299Z","entries":[{"pr":3535,"summary":"Schema Statistics: Improve formatting of scans on table detail page","channels":["enterprise-server","cloud"],"description":"Right-align the values in the Cost and Est. Scans / Min columns, and\nuse a fixed-width font to make them easier to compare."}]},{"deployed_at":"2023-12-14T21:26:02.630Z","entries":[{"pr":2995,"summary":"Index Advisor: Keep additional type information in query analysis, to reduce data type related errors","channels":["enterprise-server","cloud"],"description":"Previously we would often extract \"col1 = $1\" in the scan as part of query analysis (which looks at the complete query), and then later fail with a type related error when working with the scan. Improve some cases by instead keeping additional type information, so the scan is instead represented as \"col1 = $1::type\" (or similar)."}]},{"deployed_at":"2023-12-15T22:45:38.156Z","entries":[{"pr":3547,"summary":"Index Advisor: Correctly handle scans involving OR conditions","channels":["enterprise-server","cloud"],"description":"In some cases Index Advisor incorrectly assumed an expression like \"a AND (b OR c)\" was not able to use a simple Index Scan that supports \"a\", even though \"a\" could be indexed in such cases."}]},{"deployed_at":"2024-01-03T02:59:16.189Z","entries":[{"pr":3596,"summary":"Update query parsing logic to Postgres 16 parser","channels":["enterprise-server","cloud"],"description":"This adds compatibility for queries that use new syntax added in Postgres 16 (for example the new SQL/JSON syntax), when parsed for table references, or syntax highlighting purposes."}]},{"deployed_at":"2024-01-29T17:10:34.491Z","entries":[{"pr":3702,"summary":"Alerts & Check-Up: Fix layout bug in organization-wide check config listing","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-01-29T20:36:01.681Z","entries":[{"pr":3706,"summary":"Schema Statistics: Speed up loading of per-table list of scans when many scans are present","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-02-05T18:29:58.190Z","entries":[{"pr":3692,"summary":"EXPLAIN Plans: Improve visualization","channels":["enterprise-server","cloud"],"description":"- padding between nodes is reduced so more content fits on screen\n- table and index references now link to their respective pages\n- CTE scans now link to their parent node, making it easier to navigate large plans"}]},{"deployed_at":"2024-02-09T20:03:49.439Z","entries":[{"pr":3741,"summary":"Alerts: Show 30 days of history for resolved alerts, up from 7 days","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-02-26T20:12:08.312Z","entries":[{"pr":3800,"summary":"Resolved issues list: Sort list by resolved at timestamp descending by default","channels":["enterprise-server","cloud"],"description":"The previous sort order was ascending. With descending sort order the most recently resolved events correctly show at the top of the list."}]},{"deployed_at":"2024-02-27T07:26:25.832Z","entries":[{"pr":3779,"summary":"Schema Statistics: Add extended statistics information in the Columns tab","channels":["enterprise-server","cloud"],"description":"Starting from the collector v0.53.0, the extended statistics information is tracked. You can now see this information in the corresponding table's Schema Statistics page, under the Columns tab."}]},{"deployed_at":"2024-02-28T07:39:13.612Z","entries":[{"pr":3503,"summary":"Index Advisor: Fix handling of JOIN conditions when a parameterized index scan is unlikely","channels":["enterprise-server","cloud"],"description":"Previously Index Advisor would treat a JOIN condition as being able to use an index, even if a parameterized index scan was unlikely. With this bug fix in place, it's less likely that indexes will be recommended on JOIN conditions, as they will only be considered when the generic query plan (that the pganalyze Indexing Engine calculates) contains a Nested Loop with the relevant table on the inner side, allowing a parameterized index scan."}]},{"deployed_at":"2024-03-07T01:46:42.226Z","entries":[{"pr":3842,"summary":"Update Ruby version for Enterprise Server to 3.1.4","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-03-08T01:35:57.829Z","entries":[{"pr":3841,"summary":"Updated to Ubuntu 22.04 base image for Enterprise Server","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-03-09T18:44:50.851Z","entries":[{"pr":3879,"summary":"Alerts & Check-Up: Fix layout of organization-wide Check settings configuration","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-03-13T06:35:43.704Z","entries":[{"pr":3882,"summary":"Server-wide query performance overview: Group timeseries data if needed","channels":["enterprise-server","cloud"],"description":"This avoids performance issues that prevented the page from loading when a server has a lot of databases. For anything beyond the 5th database (as sorted by queries per second, descending) the timeseries graph on top will now group the data as \"Other databases\"."}]},{"deployed_at":"2024-03-14T01:57:19.649Z","entries":[{"pr":3092,"summary":"System page: Fix missing CPU Utilization data for Amazon RDS when enhanced monitoring is off","description":null,"channels":["enterprise-server","cloud"]}]},{"deployed_at":"2024-03-14T23:27:23.447Z","entries":[{"pr":3888,"summary":"EXPLAIN Plans: Add support for parsing Memoize nodes in text-format auto_explain output","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-03-20T21:33:47.773Z","entries":[{"pr":3902,"summary":"Setup Instructions: Make get_relation_stats_ext compatible with Postgres 12","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-03-22T17:14:48.681Z","entries":[{"pr":3889,"summary":"Update Ruby version for Enterprise Server to 3.2.3","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-03-22T21:59:50.087Z","entries":[{"pr":3908,"summary":"Require Postgres 12+ for the internal statistics database used by pganalyze Enterprise Server","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-03-29T04:14:48.436Z","entries":[{"pr":3920,"summary":"Update to pganalyze collector 0.55.0 for Enterprise Server combined image","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-03-29T17:08:00.637Z","entries":[{"pr":3916,"summary":"Query Performance: Warn when pg_stat_statements.track is set to \"none\"","channels":["enterprise-server","cloud"],"description":"This setting disables pg_stat_statements from tracking query stats,\nand so effectively disables the Query Performance feature. Showing a\nwarning makes this situation easier to discover."}]},{"deployed_at":"2024-03-29T18:44:29.769Z","entries":[{"pr":3917,"summary":"Warn when a server is over the table limit","channels":["enterprise-server","cloud"],"description":"When a server goes over its plan table limit, schema processing is\ndisabled, which breaks many pganalyze features. A warning is emitted\nin the collector, but this situation was not obvious in the app\nbefore. Now we show a warning and point to [our\ndocumentation](https://pganalyze.com/docs/collector/settings#schema-filter-settings)\non how to filter monitored tables to stay within the limit."}]},{"deployed_at":"2024-04-02T11:26:54.246Z","entries":[{"pr":3925,"summary":"Add support for Postgres 16 in in-app documentation","channels":["enterprise-server","cloud"],"description":"When the server is using Postgres 16, PostgreSQL Documentation accessible via the Config Setting page will display the Postgres 16 documentation, instead of devel (Development) version."}]},{"deployed_at":"2024-04-02T16:07:04.717Z","entries":[{"pr":3922,"summary":"Onboarding: Fix error when initially loading new server from end of setup instructions","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-04-02T19:27:23.439Z","entries":[{"pr":3924,"summary":"Enterprise Server: Raise minimum required Redis to 6.0","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-04-09T23:30:04.409Z","entries":[{"pr":3934,"summary":"Bundled nginx configuration: Correctly handle X-Forwarded-Proto set by upstream load balancers / proxies","channels":["enterprise-server","cloud"],"description":"This avoids SSL related redirect problems, or SAML single-sign on issues caused by the recent addition of nginx as a reverse proxy inside the Enterprise Server container image.\n\n$channels: enterprise-server"}]},{"deployed_at":"2024-04-10T01:37:38.393Z","entries":[{"pr":3933,"summary":"Install Docs: Keep same generated password when moving install between steps","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-04-16T02:43:28.021Z","entries":[{"pr":3946,"summary":"EXPLAIN Plan - View EXPLAIN Source: Hide \"Async Capable\" field when converting from JSON to text format","channels":["enterprise-server","cloud"],"description":"We previously retained the \"Async Capable\" field from the source JSON output when converting to text, but this does not match Postgres' own behavior (which is to only include that field for JSON output), and made the text output harder to read."}]},{"deployed_at":"2024-04-16T06:13:27.137Z","entries":[{"pr":3943,"summary":"Index Advisor: Add ability to filter out acknowledged state insights","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-04-16T07:29:41.194Z","entries":[{"pr":3937,"summary":"Automated EXPLAIN: Add a better support for handling new lines with the text log format","channels":["enterprise-server","cloud"],"description":"With the text format of `auto_explain.log_format` (text format is currently only partially supported), when the single line text format EXPLAIN is becoming two lines due to the log line length limitation, we weren't able to analyze this EXPLAIN text well. This change will add the retry when the single line parsing failed, to try parsing with the previous line."}]},{"deployed_at":"2024-04-18T00:27:58.573Z","entries":[{"pr":3953,"summary":"Index Advisor: Add support for \"pg_bigm\", \"cube\" and \"earthdistance\" extensions","channels":["enterprise-server","cloud"],"description":"Previously queries depending on these extensions (e.g. by using a \"cube\" data type) would have shown an error on the Index Advisor tab. These queries now are processed correctly and considered for Index Advisor."}]},{"deployed_at":"2024-04-18T02:27:07.976Z","entries":[{"pr":3956,"summary":"Index Advisor: Avoid Internal Error for tables that had no scans/query activity in the last 7 days","channels":["enterprise-server","cloud"],"description":null},{"pr":3954,"summary":"Index Advisor: Avoid errors when unsupported index types/data types are referenced by a table","channels":["enterprise-server","cloud"],"description":"There are certain index types that Index Advisor does not support when processing a table definition, like the RUM index access method. Previously Index Advisor would fail on any tables including such unsupported index types or unsupported data types. Going forward, these will be ignored, so that query analysis can succeed (turning queries into scans), but such indexes will not be considered by Index Advisor.\n\nSimilarly, when encountering known unsupported data types (such as the `vector` data type), columns referencing such types will be skipped by Index Advisor. This may lead to a slightly different error when queries directly reference these columns, but will allow other queries not referencing that column to succeed."},{"pr":3957,"summary":"Index Advisor: Add support for \"ltree\" extension","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-04-19T00:14:43.330Z","entries":[{"pr":3936,"summary":"Allow directly running Enterprise Server \"slim\" image as non-root user","channels":["enterprise-server"],"description":"Generically the Enterprise Server image will drop privileges to the \"app\" user as soon as it can, but container boot-up was historically still done as the \"root\" user inside the container. With this change, when using the Enterprise Server \"slim\" images (that is, the images which do not run an init system, requiring separate containers/pods to be deployed for different functions, such as web/worker/collector), you can now specify the app user (`app`, UID 1000) directly on the container host, guaranteeing the container guest OS never runs as root."},{"pr":3935,"summary":"Improve support of read-only filesystems by writing license response file to temporary folder (/tmp)","channels":["enterprise-server"],"description":"This avoids having to make the `/home/app` folder writeable for the `license_response.json` file, and instead only requires the $TMPDIR folder (typically `/tmp`) to be writeable."}]},{"deployed_at":"2024-04-23T00:27:30.490Z","entries":[{"pr":3966,"summary":"Add support for built-in nginx to Enterprise slim images","channels":["enterprise-server"],"description":"This was added in the last Enterprise release (2024.04.0) to support reverse proxying to either the\nregular application or the snapshot API on the same port (5000), depending on path.\n\nHowever we omitted to properly support this for the slim Enterprise images at the time. This adds\nthe package, allowing to run \"web\" for starting up a web server that handles both regular app\nrequests and the snapshot API."}]},{"deployed_at":"2024-04-24T19:16:23.875Z","entries":[{"pr":3974,"summary":"Enterprise Server: Add option to source $INIT_SCRIPT at startup","channels":["enterprise-server"],"description":"This enables easier use of external secret management tools in a Kubernetes environment,\nsince you can now directly have the container source a file previously written in an init\ncontainer, instead of having to manually use \"bash -c\" to source that file first. To use,\nfirst have an init container write a file to a volume mount, and then mount that same volume\nto the main pganalyze container and set $INIT_SCRIPT to the file location. The file should\ncontain \"export VARIABLE=value\" statements, e.g. to set the LICENSE_KEY or DATABASE_URL."},{"pr":3969,"summary":"Enterprise Server: Allow configuring ports used inside container","channels":["enterprise-server"],"description":"This allows overriding the following port settings:\n- PORT (default to 5000), where the reverse proxy listens for HTTP requests\n- SSL_PORT (default to 5001), where the reverse proxy listens for HTTPS requests\n- APP_PORT (default to 5002), where the main app listens for the reverse proxy\n- SNAPSHOT_PORT (default to 5003), where the snapshot API listens for the reverse proxy\n\nWe only recommend changing these when needed and recommend not changing APP_PORT and SNAPSHOT_PORT as they should be considered internal details that are subject to change."}]},{"deployed_at":"2024-04-26T18:08:40.725Z","entries":[{"pr":3979,"summary":"Fix handling of single-line SQL comments in formatted queries","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-04-30T21:22:01.087Z","entries":[{"pr":3986,"summary":"Fix snapshot upload failures caused by file size limit","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-05-01T18:05:31.854Z","entries":[{"pr":3988,"summary":"Rename memory stats that belong to the OS to avoid confusion with Postgres `shared_buffers`","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-05-06T21:17:48.733Z","entries":[{"pr":4026,"summary":"Fix `X-Forwarded-Proto` handling in snapshot API","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-05-07T01:28:59.268Z","entries":[{"pr":4020,"summary":"EXPLAIN Plans: Support all Aggregate nodes with text format explain","channels":["enterprise-server","cloud"],"description":"Previously, only the plain Aggregate with text format explain was supported. With this change, we support GroupAggregate, HashAggregate, and MixedAggregate better."}]},{"deployed_at":"2024-05-11T04:10:23.225Z","entries":[{"pr":4043,"summary":"Retry daily partition creation if background task fails","channels":["enterprise-server"],"description":"This avoids edge cases where the internal statistics partition creation fails, causing missing data on the next day."}]},{"deployed_at":"2024-05-22T01:51:46.678Z","entries":[{"pr":4035,"summary":"Query details page: Correctly show index insights under \"Index Advisor\" tab","channels":["enterprise-server","cloud"],"description":"Due to a bug in how index insights were linked to queries, pganalyze was not showing Index Advisor insights on the query details page (only in the Index Advisor itself)."}]},{"deployed_at":"2024-06-03T18:27:45.169Z","entries":[{"pr":4075,"summary":"Server: Skip activity check when removing a server that uses bundled collector","channels":["enterprise-server"],"description":"This check is moot in this situation (the bundled collector\nconfiguration is updated automatically to stop monitoring the server)."}]},{"deployed_at":"2024-06-10T19:43:22.642Z","entries":[{"pr":4050,"summary":"Remove compatibility layer for packed stats rollout","channels":["enterprise-server"],"description":"Release 2024.04.0 contained dual-write logic for internal stats tables to migrate to a new packed structure without requiring an expensive database migration or otherwise dropping historical data. This release drops the old table structure. As long as you have been running release 2024.04.x for 30 days, no data will be lost with this release."}]},{"deployed_at":"2024-06-11T02:00:25.793Z","entries":[{"pr":4082,"summary":"Alert Policy: Enhanced Email notifications","channels":["enterprise-server","cloud"],"description":"Email notifications are now sent by default for all critical severity issues. Previously, some critical issues did not trigger email notifications due to an oversight. This has been corrected.\nSeveral checks were missing from the Alert Policy page, which prevented email notifications for those checks. This update includes all checks on the Alert Policy page, making it possible to enable email notifications for every critical severity issue."}]},{"deployed_at":"2024-06-11T04:55:44.685Z","entries":[{"pr":4087,"summary":"Per-table VACUUM information: Fix rendering bug when autovacuum_vacuum_insert_threshold is 0","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-06-26T21:39:59.268Z","entries":[{"pr":4110,"summary":"Add object storage test to Enterprise self-check","channels":["enterprise-server"],"description":"This validates that object storage is configured correctly when\nrunning the self-check, making it easier to diagnose setup problems."}]},{"deployed_at":"2024-07-03T01:12:52.880Z","entries":[{"pr":4120,"summary":"Avoid false positives in vulnerability scanners by removing dependency files not actually in use","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-07-03T04:07:00.867Z","entries":[{"pr":4122,"summary":"Update bundled collector to v0.57.0","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-07-03T05:08:02.790Z","entries":[{"pr":4123,"summary":"Avoid internal load balancer errors related to IPv6 loopback address","channels":["enterprise-server"],"description":"This avoids potentially confusing errors that are caused by the internal nginx load balancer attempting IPv6 connections to the internal backend services."}]},{"deployed_at":"2024-07-17T22:31:31.465Z","entries":[{"pr":3733,"summary":"Dummy changelog entry to make sure image handling is now working correctly","channels":["enterprise-server","cloud"],"description":"![image](https://d1amgrxiy6p5ue.cloudfront.net/entries/pr-3733-ce998e22819645666cbbdec3ff2162d59b1b668b/assets/e6aa48e1-9ab0-4151-8697-5c6fcfd2aff8)\n\ntest7"}]},{"deployed_at":"2024-07-17T23:55:30.192Z","entries":[{"pr":4125,"summary":"Add more time predefined time periods to date picker","channels":["enterprise-server","cloud"],"description":null},{"pr":4162,"summary":"Display a notice when a server is using an older collector","channels":["enterprise-server","cloud"],"description":"We very rarely break backward compatibility with older collectors, but\nwe do regularly update the collector to fix bugs, introduce new\nfunctionality, or collect new types of data. We recommend upgrading\nregularly.\n\nYou can check the [collector\nCHANGELOG](https://github.com/pganalyze/collector/blob/main/CHANGELOG.md)\nfor the update history."}]},{"deployed_at":"2024-07-24T03:10:37.499Z","entries":[{"pr":4175,"summary":"Update bundled collector to v0.57.1","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-07-26T03:56:39.557Z","entries":[{"pr":4183,"summary":"Schema Statistics: Increase width of schema name column in table listing","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-08-01T16:59:25.853Z","entries":[{"pr":4160,"summary":"Remove support for collector versions below 0.40.0","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-08-13T15:52:46.100Z","entries":[{"pr":4219,"summary":"VACUUM Advisor: Hide negative bloat estimates","channels":["enterprise-server","cloud"],"description":"In some situations, bloat can be estimated as negative due to\nlimitations of the bloat estimation heuristics. Hide estimates from\nthese cases to avoid confusion."}]},{"deployed_at":"2024-08-16T19:37:15.194Z","entries":[{"pr":4174,"summary":"EXPLAIN Plans: Revise EXPLAIN details layout","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-08-22T16:55:42.725Z","entries":[{"pr":4229,"summary":"Improve date range selection on small screens","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-08-27T17:19:27.474Z","entries":[{"pr":4239,"summary":"EXPLAIN: Fix date range selector menu layout issue on smaller screens","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-08-27T20:55:42.931Z","entries":[{"pr":4185,"summary":"Recommend removing unused expression indexes in Unused Index alert","channels":["enterprise-server","cloud"],"description":"Previously expression indexes were excluded because they produce column statistics that the query planner can benefit from. But this was confusing for users who knew some indexes weren't being queried, and yet we didn't recommend deleting them. You may want to additionally `CREATE STATISTICS` for the expression when dropping an expression index if you notice worse query plans."}]},{"deployed_at":"2024-08-29T03:28:28.023Z","entries":[{"pr":4240,"summary":"Update a duplicate snapshot warning logic in Server Settings page","channels":["enterprise-server","cloud"],"description":"Previously, this was wrongly providing a warning when the test snapshot is executed recently. This is now fixed."}]},{"deployed_at":"2024-08-29T17:05:09.771Z","entries":[{"pr":4235,"summary":"Allow filtering Server and Database drop-down menus","channels":["enterprise-server","cloud"],"description":"This can be useful when working with a large number of servers or\ndatabases."}]},{"deployed_at":"2024-08-30T23:18:08.636Z","entries":[{"pr":4244,"summary":"System Stats: Fix CPU core count calculation","channels":["enterprise-server","cloud"],"description":"We previously multiplied the CPU logical core count by the number of\nsockets to determine this number, but that's not the commonly expected\nway of calculating this. Also rename the field to \"Logical Cores\" to\nclarify the meaning."}]},{"deployed_at":"2024-09-06T03:05:45.723Z","entries":[{"pr":4288,"summary":"Index Advisor: Fix the count in \"QUERIES\" column in insights list","channels":["enterprise-server","cloud"],"description":"In the Missing Indexes tab in the Index Advisor page, the column \"QUERIES\" was showing the number of missing indexes in that insight (table) previously. Now this column shows the number of unique affected queries due to these missing indexes as intended."}]},{"deployed_at":"2024-09-10T23:43:28.278Z","entries":[{"pr":4297,"summary":"Update bundled Enterprise Server collector to v0.58.0","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-09-11T02:09:37.561Z","entries":[{"pr":4289,"summary":"Index Advisor: Show affected index count of each table in insights list","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-09-12T22:52:13.623Z","entries":[{"pr":4300,"summary":"LDAP Authentication: Require valid SSL certificate for LDAP server","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-09-20T00:25:30.874Z","entries":[{"pr":4311,"summary":"Schema Statistics: Show notice when the column stats are not available for the table due to outdated stats","channels":["enterprise-server","cloud"],"description":"When the statistics in pg_stats were out of sync with the current table structure, such as when columns have been added or removed since the last statistics collection, they were simply not shown previously. With this change, show notification so that ANALYZE can be run to solve the issue."}]},{"deployed_at":"2024-10-03T16:29:21.587Z","entries":[{"pr":4304,"summary":"EXPLAIN: Tweak plan fingerprinting to improve detection of partition indexes","channels":["enterprise-server","cloud"],"description":"This will result in the same fingerprint for substantially identical\nquery plans that were previously fingerprinted distinctly."}]},{"deployed_at":"2024-10-09T20:17:22.961Z","entries":[{"pr":4333,"summary":"Update Heroku setup documentation","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-10-11T09:55:04.344Z","entries":[{"pr":4241,"summary":"System: Support showing system info and metrics for Azure databases","channels":["enterprise-server","cloud"],"description":"To enable this, set up the `AZURE_SUBSCRIPTION_ID` with the collector version 0.59.0 and above."}]},{"deployed_at":"2024-10-23T20:10:07.631Z","entries":[{"pr":4360,"summary":"VACUUM Advisor: Fix loading vacuum run details when table information is not available","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-10-23T23:06:47.020Z","entries":[{"pr":4361,"summary":"Server: Fix link to AWS Console for RDS databases","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-10-29T01:45:12.363Z","entries":[{"pr":4405,"summary":"Query Details: EXPLAIN Plans tab now respects the date picker selection","channels":["enterprise-server","cloud"],"description":"Previously, EXPLAIN Plans tab in the query details page was showing only up to the most recent 50 EXPLAIN Plans, regardless of the time specified in the date picker. With this change, it'll now respect the time selected in the date picker.\n\nIn addition to this, introduce the pagination and also ability to search by the plan fingerprint to the list."}]},{"deployed_at":"2024-10-29T02:40:36.326Z","entries":[{"pr":4404,"summary":"Schema Statistics: Show matching query scans on index detail page","channels":["enterprise-server","cloud"],"description":"Now when viewing a specific index, you can see the matching table scans and associated queries."}]},{"deployed_at":"2024-10-31T02:51:36.308Z","entries":[{"pr":4417,"summary":"Don't include IPv6 listen directives in nginx.conf","channels":["enterprise-server","cloud"],"description":"Most container environments today don't use IPv6 in practice for internal networking, and the listen directives cause issues when a host explicitly has IPv6 disabled.\n\n$channels: enterprise-server"},{"pr":4416,"summary":"Fix Enterprise Server container crash when LDAP authentication is enabled","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-10-31T15:33:54.532Z","entries":[{"pr":4419,"summary":"Enterprise Server: Add support for Azure, Google Cloud, and PII filtering settings for integrated collector","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2024-11-27T02:01:46.135Z","entries":[{"pr":4433,"summary":"Indexing Engine: Add support for queries using simple expressions involving CURRENT_DATE that may need to be evaluated at plan time","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-11-28T00:15:05.894Z","entries":[{"pr":4456,"summary":"Track Postgres buffer cache usage","channels":["enterprise-server","cloud"],"description":"After upgrading to collector version 0.63.0 and enabling the `pg_buffercache` extension, pganalyze will track buffer cache usage on a per-server basis so you can see which tables use the most memory and how the workload changes over time."}]},{"deployed_at":"2024-12-09T23:59:48.293Z","entries":[{"pr":4492,"summary":"Automated EXPLAIN: Improve \"no plans found\" message","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-12-19T22:56:51.787Z","entries":[{"pr":4520,"summary":"EXPLAIN: Clean up rendering of node details for sorts that do not spill to disk","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2024-12-24T11:05:12.471Z","entries":[{"pr":4482,"summary":"Add a new permission \"Tune Queries\" and a new default role \"Tune Queries (All Servers)\"","channels":["enterprise-server","cloud"],"description":"This is a permission for the Query Tuning feature. With this permission, the user is allowed to run EXPLAIN ANALYZE using the collector.\nThis permission will be turned on with the default role \"Admin (All Servers)\", and a new default role \"Tune Queries (All Servers)\". Other roles such as \"View & Modify (All Servers)\" will not have this permission by default."}]},{"deployed_at":"2025-01-10T21:26:30.818Z","entries":[{"pr":4578,"summary":"Active query alert: Fix handling of `pganalyze:no-alert` comment when query text is truncated","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-01-13T07:06:18.174Z","entries":[{"pr":4532,"summary":"Index Advisor: Support custom extension schemas","channels":["enterprise-server","cloud"],"description":"This ensures query analysis can complete when extension data types are utilized where the extension is installed in a custom (i.e. non \"public\") schema."}]},{"deployed_at":"2025-01-13T16:18:13.823Z","entries":[{"pr":4579,"summary":"Active query alert: Ignore connections from pg_repack","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-01-14T19:16:04.692Z","entries":[{"pr":4586,"summary":"Organization Dashboard: Show inactive servers if no active servers present","channels":["enterprise-server","cloud"],"description":"The Organization Dashboard includes a list of servers, with a toggle\nfor showing servers with no recent snapshots recorded. This sets the\ntoggle to on by default if no servers have recent snapshots."}]},{"deployed_at":"2025-01-16T04:00:47.118Z","entries":[{"pr":4590,"summary":"Retire demo.pganalyze.com","channels":["enterprise-server","cloud"],"description":"Check https://pganalyze.com/product-tour instead in the future."}]},{"deployed_at":"2025-01-18T02:16:25.798Z","entries":[{"pr":4591,"summary":"Add SSL_CERT_PATH and SSL_KEY_PATH config settings","channels":["enterprise-server"],"description":"The new SSL_CERT_PATH and SSL_KEY_PATH settings allow specifying a custom SSL certificate and key for the built-in nginx reverse proxy as a path inside the container (e.g. to a volume mount), instead of passing in the whole certificate/key with the existing SSL_CERT / SSL_KEY settings."}]},{"deployed_at":"2025-01-22T00:40:42.348Z","entries":[{"pr":4643,"summary":"Index Advisor: Fix highlight of menu item when some tabs are selected","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-01-24T07:18:18.770Z","entries":[{"pr":4649,"summary":"EXPLAIN Plans: Support parsing WindowAgg node with Run Condition with text format EXPLAIN result","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-01-28T04:47:48.708Z","entries":[{"pr":4651,"summary":"Improve main menu layout for users who belong to many organizations","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-01-30T18:24:22.962Z","entries":[{"pr":4660,"summary":"Automated EXPLAIN: Link to plan comparison from EXPLAIN sample list","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-01-31T08:45:56.574Z","entries":[{"pr":4664,"summary":"Server Settings: Show pg_stat_statements info data in Debug Info panel when available","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-02-06T01:56:34.383Z","entries":[{"pr":4667,"summary":"EXPLAIN: Include EXPLAIN node relation or function name in comparison view","channels":["enterprise-server","cloud"],"description":null},{"pr":4666,"summary":"EXPLAIN: Add Buffers as a metric for plan comparison","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-02-12T00:14:21.743Z","entries":[{"pr":4684,"summary":"Update integrated collector version to v0.64.1","channels":["enterprise-server"],"description":null},{"pr":4683,"summary":"Index Advisor: Fix handling of queries that reference tables that use domain columns with invalid constraints","channels":["enterprise-server","cloud"],"description":null},{"pr":4675,"summary":"Settings: Add Postgres 17 in-app documentation, and include updates from minor versions for older releases","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-02-12T07:13:25.148Z","entries":[{"pr":4680,"summary":"Enterprise Server: Increase nginx worker_connections to 10000","channels":["enterprise-server"],"description":"This avoids errors when sending snapshots of hundreds of servers concurrently to the same pganalyze Enterprise Server container."}]},{"deployed_at":"2025-02-20T02:07:56.124Z","entries":[{"pr":4698,"summary":"Query Tuning Workbooks: Fix unintentional normalization of partition names in plans","channels":["enterprise-server","cloud"],"description":"Normalization is used in plan fingerprinting, but it should not have\naffected displayed plans."}]},{"deployed_at":"2025-02-24T22:22:11.917Z","entries":[{"pr":4696,"summary":"EXPLAIN: Improve detail text color in comparison view","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-02-26T17:38:15.648Z","entries":[{"pr":4706,"summary":"Explain Comparison: Fix comparison of CTE Scan nodes","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-03-04T22:27:10.843Z","entries":[{"pr":4718,"summary":"Enterprise Server: Include primary/replica counts in license server information","channels":["enterprise-server"],"description":"For installations that use regular license keys, include a count of primary and replica servers with recent data in the counts reported to the pganalyze license server. This information is used to confirm whether your Enterprise Server installation is within the licensed server limit."}]},{"deployed_at":"2025-03-05T02:43:34.841Z","entries":[{"pr":4721,"summary":"Enterprise Server: Update bundled collector to v0.65.0","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2025-03-05T03:28:03.775Z","entries":[{"pr":4717,"summary":"Enterprise Server: Show warning when exceeding the licensed server limit","channels":["enterprise-server"],"description":"This will show a warning in the pganalyze app when an installation exceeds the licensed server count."}]},{"deployed_at":"2025-03-10T21:26:01.289Z","entries":[{"pr":4732,"summary":"Fix support for LDAP authentication","channels":["enterprise-server"],"description":"This was accidentally broken in v2025.03.0 due to an unrelated security dependency upgrade."}]},{"deployed_at":"2025-03-13T02:19:10.023Z","entries":[{"pr":4744,"summary":"Fix issue that can cause paginated tables to reset to the first page sometimes","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-03-14T23:22:37.761Z","entries":[{"pr":4749,"summary":"Query Details: Show the most recently seen tags in the Query Tags tab","channels":["enterprise-server","cloud"],"description":"Previously, when a query had many associated tags, the Query Tags tab displayed an arbitrary limited subset, typically showing the oldest tags seen within the last 7 days. We now prioritize the most recently seen tags."}]},{"deployed_at":"2025-03-18T03:35:51.910Z","entries":[{"pr":4748,"summary":"Index Advisor: Fix handling of queries that reference domains (or tables with domain columns) with NOT VALID constraints","channels":["enterprise-server","cloud"],"description":"The previous fix did not resolve the issue, and query analysis for these queries was still failing."}]},{"deployed_at":"2025-03-18T08:07:36.606Z","entries":[{"pr":4720,"summary":"Billing: Support for 3D Secure payments","channels":["enterprise-server","cloud"],"description":"Support 3D Secure authentication when upgrading or changing plans. Additionally, outstanding invoices can be paid directly from the Billing page."}]},{"deployed_at":"2025-03-18T17:30:14.103Z","entries":[{"pr":4756,"summary":"When signing in, redirect to last-visited organization","channels":["cloud"],"description":"This has no effect if you are a member of only a single organization."}]},{"deployed_at":"2025-03-20T18:17:10.842Z","entries":[{"pr":4775,"summary":"Alerts & Check-Up: Update in-app documentation for the Xmin Horizon Check","channels":["enterprise-server","cloud"],"description":"Update the [Xmin Horizon Check](https://pganalyze.com/docs/checks/vacuum/xmin_horizon)\nto format full (64-bit) transaction IDs specially. Currently, they are formatted as\nnumbers, but that makes it hard to read the lower 32-bit transaction ID Postgres sometimes\nuses (e.g., backend_xmin in pg_stat_activity). Instead, separate the lower 32 bits and the \n\"epoch\" (the upper 32 bits)."}]},{"deployed_at":"2025-03-25T15:01:20.089Z","entries":[{"pr":4784,"summary":"Require Postgres 13+ for the internal statistics database used by pganalyze Enterprise Server","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2025-04-01T04:22:58.731Z","entries":[{"pr":4679,"summary":"Email confirmation is now required","channels":["enterprise-server","cloud"],"description":"Email validation is now enforced during signup and when updating an email address. A confirmation link must be clicked before the account is activated or the email change is applied. Users invited via a sharable link will be redirected to a page to send a confirmation email."}]},{"deployed_at":"2025-04-01T09:31:02.703Z","entries":[{"pr":4785,"summary":"Query Analysis: Support analyzing queries referencing the names with tildes","channels":["enterprise-server","cloud"],"description":"Previously, when the query is referencing some names (e.g. table names, index names) with tildes, the query analysis was failing and the Index Advisor was unable to process."}]},{"deployed_at":"2025-04-01T21:17:45.259Z","entries":[{"pr":4832,"summary":"Query Tuning Workbooks: Improve SQL editor","channels":["enterprise-server","cloud"],"description":"Adds syntax highlighting and some auto-completion."}]},{"deployed_at":"2025-04-08T18:21:59.898Z","entries":[{"pr":4851,"summary":"Index Advisor: Fix color of Considered Index icons","channels":["enterprise-server","cloud"],"description":"Previously, this icon did not show the index id unless hovered."}]},{"deployed_at":"2025-04-29T17:51:51.867Z","entries":[{"pr":4883,"summary":"Index Advisor: Support schemas that include multiline CHECK constraints","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-05-02T21:34:37.286Z","entries":[{"pr":4890,"summary":"Index Advisor: Support extensions installed in pg_catalog schema","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-05-20T16:40:50.076Z","entries":[{"pr":4906,"summary":"Alerts & Check-Up: Fix New Slow Query query stats loading problem","channels":["enterprise-server","cloud"],"description":"This fixes a problem that could occur on issue detail pages for the\nNew Slow Query check that would cause stats for the associated query\nto fail to load."}]},{"deployed_at":"2025-05-21T00:44:32.565Z","entries":[{"pr":4897,"summary":"Enterprise Server: Update built-in pganalyze Collector to v0.66.0","channels":["enterprise-server"],"description":"See full changelog: https://github.com/pganalyze/collector/blob/main/CHANGELOG.md#0660------2025-05-07"}]},{"deployed_at":"2025-05-21T21:37:20.377Z","entries":[{"pr":4913,"summary":"EXPLAIN: Fix node selection in the Node Tree view","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-05-28T02:47:00.750Z","entries":[{"pr":4914,"summary":"Connection tracing: Don't show incorrect information from newer backend","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-05-29T09:56:07.844Z","entries":[{"pr":4922,"summary":"System: Hide unavailable system metrics data for Crunchy Bridge instances","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-05-29T15:04:00.081Z","entries":[{"pr":4790,"summary":"Schema Statistics: Show index last used date on list views, making it easier to prioritize unused indexes by their size","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-05-30T04:04:16.179Z","entries":[{"pr":4856,"summary":"Support showing scans information for the index of the partition parent","channels":["enterprise-server","cloud"],"description":"Previously, if you navigate to the index page of the partition parent, the \"Scans on Index\" panel didn't have any data to show, even though the index is actively used. With this change, the scan information is properly analyzed with the partition parent so that the scan information will show up in the \"Scans on Index\" panel."}]},{"deployed_at":"2025-05-30T20:06:57.982Z","entries":[{"pr":4916,"summary":"Remove deprecated GraphQL fields","channels":["enterprise-server"],"description":"Enterprise release 2023-08-0 previously deprecated these fields from the `getIssues` API,\nand this release now removes them: `displayName`, `referent`, `references.secondaryUrl`."}]},{"deployed_at":"2025-06-05T23:48:44.886Z","entries":[{"pr":4874,"summary":"Combine queries run by multiple Postgres roles","channels":["enterprise-server","cloud"],"description":"Previously if a query was run by multiple Postgres roles, a duplicate query would exist in pganalyze for each role.\nThose duplicates are now merged into a single query, making pganalyze easier to use if many roles call the same queries.\nThe call count for each role can be viewed on the Query Tags page when viewing a specific query."}]},{"deployed_at":"2025-06-10T03:49:24.279Z","entries":[{"pr":4952,"summary":"Query Samples: Ability to show full parameter values","channels":["enterprise-server","cloud"],"description":"Currently, the parameter value exceeding 20 characters is truncated. With a new \"Show full values\" button, it'll expand the truncated part and show full values when available. Note that the full value still might not be available depending on the log_parameter_max_length setting."}]},{"deployed_at":"2025-06-11T07:13:34.992Z","entries":[{"pr":4954,"summary":"Query Analysis: Support analyzing queries with tables referenced in subqueries under WHERE ... IS NULL or IS TRUE","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-06-17T05:30:46.375Z","entries":[{"pr":4956,"summary":"Workbooks: Add function, table, and view names to SQL editor autocomplete","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-06-17T06:39:13.195Z","entries":[{"pr":4955,"summary":"Support I/O Timing data in EXPLAIN with Postgres 17 and above","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-06-24T02:25:13.668Z","entries":[{"pr":4961,"summary":"Billing: Add a link to the external payment page with failed payments","channels":["enterprise-server","cloud"],"description":"For failed payments, customers can either pay within the pganalyze app using \"Pay Now\" button, or using the external payment page to pay."}]},{"deployed_at":"2025-07-01T12:21:18.213Z","entries":[{"pr":4948,"summary":"Remove a mention of a retired env var LDAP_ADMIN_GROUP_CN when running `rake db:seed`","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2025-07-10T01:57:25.788Z","entries":[{"pr":4999,"summary":"LDAP Authentication: Allow setting CA file, changing SSL verification mode","channels":["enterprise-server"],"description":"This introduces two new settings to customize LDAP connections for authentication, when enabled:\n\n- LDAP_ENCRYPTION_CA_FILE: Path to CA file to validate server certificate\n- LDAP_ENCRYPTION_VERIFY_MODE: Whether to verify the server certificate (\"peer\", the default) or not (\"none\")\n\nNote that LDAP_ENCRYPTION_VERIFY_MODE=none matches the historic behavior of not verifying before Enterprise Server release v2025.10.0."},{"pr":5001,"summary":"Enterprise Server: Update bundled collector to 0.66.2","channels":["enterprise-server"],"description":null},{"pr":4988,"summary":"Workbooks: Support viewing differences between Query Plan variants","channels":["enterprise-server","cloud"],"description":"When viewing a variant in a Query Tuning Workbook, you can now see any difference in query text, hints or planner settings, as compared to the baseline:"}]},{"deployed_at":"2025-07-15T17:43:41.657Z","entries":[{"pr":5006,"summary":"Fix long dropdown option text overflowing into \"clear\" icon in some dropdowns","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-07-16T20:16:28.655Z","entries":[{"pr":5003,"summary":"EXPLAIN: Add some inline details to the EXPLAIN grid view","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-07-16T22:06:42.176Z","entries":[{"pr":5008,"summary":"Workbooks: Add built-in diffing option in Editor","channels":["enterprise-server","cloud"],"description":"When drafting a new Query Tuning variant, you can now compare the diff of that draft against the original query."}]},{"deployed_at":"2025-07-17T01:56:04.070Z","entries":[{"pr":5020,"summary":"Log Insights: Fix expansion of log line details outside of the main Log Insights page","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-07-18T01:22:40.434Z","entries":[{"pr":5025,"summary":"Index Advisor: Fix \"Unexpected rtekind: 2\" on certain queries with Postgres 16/17","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-07-23T03:21:22.475Z","entries":[{"pr":5027,"summary":"Workbooks: Use curated Postgres dialect and customize keyword icon for text editor completions list","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-07-23T04:29:19.212Z","entries":[{"pr":5031,"summary":"Workbooks: Standardize SQL syntax highlighting theme and disable editor find/replace dialog","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-07-23T21:54:14.012Z","entries":[{"pr":5036,"summary":"Workbooks: Format and normalize query text using standardized SQL format","channels":["enterprise-server","cloud"],"description":"To support new diffing option as well as prepare for upcoming Query Advisor functionality,\npganalyze Query Tuning Workbooks now always format the SQL text in the editor and on\nvariant pages using a consistent format.\n\nThis change also normalizes certain SQL expressions without impacting their meaning,\nfor example `interval $1` will be rewritten to `$1::interval`."}]},{"deployed_at":"2025-07-26T00:59:46.586Z","entries":[{"pr":5051,"summary":"Index Advisor: Add support for the pgcrypto Postgres extension","channels":["enterprise-server","cloud"],"description":null},{"pr":5024,"summary":"Enterprise Server: Support PostGIS if bundled separately through custom container build","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2025-08-02T23:24:04.929Z","entries":[{"pr":5054,"summary":"Fix page focus after loading to allow scrolling the main content with arrow keys","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-08-05T04:01:29.693Z","entries":[{"pr":5059,"summary":"EXPLAIN Plans: Support showing the extra information like the execution time when JSON format view is selected","channels":["enterprise-server","cloud"],"description":"Previously, when the JSON format view is selected, it was dropping the information like \"Planning Time\", \"Execution Time\", \"Query Identifier\", etc..\nWith this change, the JSON format view will show all information captured with the auto_explain. If the auto_explain is using a text format, it's converted to the JSON format with the best effort."}]},{"deployed_at":"2025-08-05T07:29:22.320Z","entries":[{"pr":4909,"summary":"Schema Statistics: Add support for handling named NOT NULL constraints, added in Postgres 18","channels":["enterprise-server","cloud"],"description":"When running the upcoming Postgres 18 release, you will see columns marked as NOT NULL on each table's \"Columns\" tab, as well as the automatically created named NOT NULL constraints on the \"Constraints\" tab."}]},{"deployed_at":"2025-08-05T17:59:23.848Z","entries":[{"pr":5075,"summary":"Add \"What's New\" link in menu","channels":["cloud"],"description":"Adds a \"What's New\" menu item that shows a list of recent user-visible\nchanges to pganalyze."}]},{"deployed_at":"2025-08-06T01:01:32.268Z","entries":[{"pr":5079,"summary":"Add Inter as a fallback font option for the application UI","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-08-07T02:41:25.774Z","entries":[{"pr":5084,"summary":"Rename \"Query Tuning Workbooks\" to \"Workbooks\"","channels":["enterprise-server","cloud"],"description":"As part of the beta testing process, and looking ahead for future navigation changes with the upcoming Query Advisor, we are dropping the \"Query Tuning\" prefix from Workbooks for clarity. The previous menu item \"Query Tuning\" has now been renamed to \"Workbooks\". We are also making this change to support future use cases for pganalyze Workbooks that may not involve query tuning directly, for example testing index changes, etc."}]},{"deployed_at":"2025-08-13T09:17:16.297Z","entries":[{"pr":5089,"summary":"Workbooks: Move the workbook info sidebar on the Overview page from the left to the right side","channels":["enterprise-server","cloud"],"description":"This provides better consistency across the app."}]},{"deployed_at":"2025-08-13T17:29:32.226Z","entries":[{"pr":5099,"summary":"Remove option to sort query stats by query text","channels":["enterprise-server","cloud"],"description":"This change helps improve request performance. Note that searching by query text is still fully supported."}]},{"deployed_at":"2025-08-15T15:55:43.481Z","entries":[{"pr":5114,"summary":"Enterprise self-check: Correctly handle MAILER_SSL=none configuration","channels":["enterprise-server"],"description":"This configuration would previously fail to pass the self-check, despite working in practice."}]},{"deployed_at":"2025-08-20T23:22:06.356Z","entries":[{"pr":4924,"summary":"Log Insights: Update overview","channels":["enterprise-server","cloud"],"description":"- use consistent colors for each category\n - give more space to classification labels so they are readable without hovering\n - drop classification codes to give the labels more space (the codes still show on hover)\n - allow collapsing categories, and collapse some categories by default (the selection will persist)\n - drop some unnecessary borders"}]},{"deployed_at":"2025-08-21T21:08:21.570Z","entries":[{"pr":5117,"summary":"EXPLAIN: Update the sidebar insight listing for the Grid view","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-09-04T05:32:32.335Z","entries":[{"pr":5144,"summary":"Workbooks: Add query tuning parameters to autocomplete list","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-09-04T11:18:46.965Z","entries":[{"pr":5157,"summary":"Index Advisor: Improve support of tables with many scans or columns","channels":["enterprise-server","cloud"],"description":"When a table has many scans or columns, the number of possible indexes to consider can be very large, which was causing OOM and prevented the Index Advisor from running on such tables. This change improves memory usage and increases the support for these cases.\n\nNote: There are still tables with a high number of scans or columns that we are not able to run the Index Advisor on, and we continue to work on supporting more of them."}]},{"deployed_at":"2025-09-17T15:31:30.350Z","entries":[{"pr":5150,"summary":"Further improve query stats compression using specialized \"pco\" format","channels":["enterprise-server"],"description":"Adjust the internal query statistics tables to use the \"pco\" format for best-in-class compression of timeseries data. This is part of an effort to allow increased retention times due to significantly smaller storage requirements. The new statistic format requires a data migration which will run as part of the `rake db:migrate` upgrade task by default.\n\nIf your Enterprise Server installation monitors hundreds of servers or more, this data migration may take an hour or more to run. If you would like to delay the data backfill step to run it after migrations have been applied, first run the migrations with `SKIP_QUERY_STATS_PCO_BACKFILL=1` environment variable set. Then after the new code is deployed run `Rust::Migrate.migrate('20250902174735_backfill_query_stats_pco')` in a console (`console` command to the container / Docker entrypoint)."}]},{"deployed_at":"2025-09-25T09:15:34.551Z","entries":[{"pr":5209,"summary":"Enterprise Server: Update built-in pganalyze Collector to v0.66.3","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2025-10-01T01:32:46.283Z","entries":[{"pr":5212,"summary":"Query Advisor: Proactive query plan optimization for Postgres is now generally available","channels":["enterprise-server","cloud"],"description":"Query Advisor continuously analyzes EXPLAIN plans in the background to detect problematic patterns and provide actionable query rewrites. Detected issues appear in the Query Advisor landing page, Workbooks, and query detail views.\n\n[Learn more in the announcement post](https://pganalyze.com/blog/query-advisor-ga)"}]},{"deployed_at":"2025-10-02T04:33:06.808Z","entries":[{"pr":5205,"summary":"Improve \"Replication: High Replication Lag\" check-up","channels":["enterprise-server","cloud"],"description":"This adds a graph of the replication lag to the Issue page, and clarifies which IP address the affected replica is using, instead of naming the follower by internal UUID.\n\n<img width=\"2478\" height=\"1254\" alt=\"image\" src=\"https://changelog-staging.pganalyze.com/entries/pr-5205-1061b4e16ed942c5c45d2ba79ad550cf69a7fc7b/assets/a1d9c45a-aab5-4905-82b2-8552fbb06b54\" />"},{"pr":5204,"summary":"System / Replication: Improve loading performance of replication follower list","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-10-08T10:33:00.080Z","entries":[{"pr":5234,"summary":"Workbooks: Show \"Run EXPLAIN\" option on the overview page when upload is incomplete","channels":["enterprise-server","cloud"],"description":"Now you can resume the upload directly from the overview, instead of having to go to the variant page."}]},{"deployed_at":"2025-10-16T03:12:05.703Z","entries":[{"pr":5251,"summary":"Workbooks: Support choosing parameter sets from query samples even if parameters are merged","channels":["enterprise-server","cloud"],"description":"Previously, merging or renaming parameters caused a \"Failed to create a parameter set\" error when query samples are selected as parameter sets."}]},{"deployed_at":"2025-10-23T20:12:36.533Z","entries":[{"pr":4911,"summary":"Add support for converting text plans collected with EXPLAIN (COSTS OFF) to JSON","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-10-31T17:44:49.166Z","entries":[{"pr":5269,"summary":"Workbooks: Fix parameter type inference when IN lists are used","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-11-06T18:06:52.743Z","entries":[{"pr":5306,"summary":"Connections: Add ability to select time range in Connection States History graph by dragging with the mouse","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-11-17T16:35:53.698Z","entries":[{"pr":5323,"summary":"Fix over-counting table sizes in table overview stats per database","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-11-18T23:02:49.007Z","entries":[{"pr":5326,"summary":"Alerts & Check-Up: Relax pganalyze:no-alert check","channels":["enterprise-server","cloud"],"description":"Previously, to skip Active Query and Blocking Query alerts for a\nspecific query, the string \"pganalyze:no-alert\" was required to be\nembedded in a properly formatted comment. Now, the string can occur\nanywhere in the query text to avoid an issue being created."}]},{"deployed_at":"2025-11-24T21:11:28.704Z","entries":[{"pr":5335,"summary":"Show estimated row count for partitions on table list view","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-12-02T17:41:23.110Z","entries":[{"pr":5328,"summary":"EXPLAIN: Default to grid view when showing plans","channels":["enterprise-server","cloud"],"description":"The grid view for displaying EXPLAIN plans in pganalyze is now the\ndefault. It is more compact, and is generally a better way to examine\nEXPLAIN plans.\n\nThe old \"node tree\" view may be retired at some point. Please reach\nout if you find features of the node tree view that you would like\nto see in the grid view, or any other EXPLAIN display feedback."}]},{"deployed_at":"2025-12-09T11:29:33.879Z","entries":[{"pr":5303,"summary":"Workbooks: Add an ability to see the list of workbooks related to the query in the query details page","channels":["enterprise-server","cloud"],"description":null},{"pr":5348,"summary":"Weekly Performance Report: Fix incorrect order of the day in Query Activity By Server graph","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-12-11T18:41:11.539Z","entries":[{"pr":5375,"summary":"Schema Statistics: Show View detail page when a view is loaded through the Table detail page","channels":["enterprise-server","cloud"],"description":"The Table detail page shows some view information, but it does not\nshow the view SQL and shows some irrelevant information. Some internal\nlinks (e.g., from query texts) inadvertently link to the table page\neven for views, so this improves the experience when following those."}]},{"deployed_at":"2025-12-11T22:10:29.845Z","entries":[{"pr":5363,"summary":"Ensure logical date ranges like \"Last 24h\" are resolved appropriately","channels":["enterprise-server","cloud"],"description":"Currently, when a period like \"Last 24h\" is selected in the date\npicker, this is only resolved to a concrete date range (e.g.,\n\"2025-12-04 00:00:00 to 2025-12-05 00:00:00\") once. If you use the app\nfor an extended period of time, that resolved date range is stuck in\nthe past and grows stale.\n\nInstead, re-resolve the date range periodically (only when navigating to\na new page) to ensure fresh data is always loaded."}]},{"deployed_at":"2025-12-22T22:49:56.436Z","entries":[{"pr":5405,"summary":"Date picker: Fix use of absolute time values","channels":["enterprise-server","cloud"],"description":"This was broken by accident in a recent change related to improving the handling of symbolic time ranges (like \"24h\")."}]},{"deployed_at":"2025-12-23T04:51:53.928Z","entries":[{"pr":5409,"summary":"Update bundled collector from 0.66.2 to 0.67.0","channels":["enterprise-server"],"description":"See the [collector changelog](https://github.com/pganalyze/collector/blob/main/CHANGELOG.md#0670------2025-12-08) for the full details"}]},{"deployed_at":"2025-12-23T23:43:36.750Z","entries":[{"pr":5411,"summary":"Drop obsolete mentions of Postgres 9.6-specific functionality","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-12-30T19:59:37.352Z","entries":[{"pr":5414,"summary":"System Metrics: Improve guidance when buffer cache metrics are not available","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2025-12-31T01:36:18.056Z","entries":[{"pr":5319,"summary":"Enable 100 day retention for query and schema statistics on Enterprise plans","channels":["enterprise-server","cloud"],"description":"Enterprise plans now store 100 days (increased from 30 days) of history for query statistics and table/index statistics. The Scale plan now stores 35 days of history, the Production plan 14 days of history. The date picker interface has been updated to reflect the additional retention time and to allow selecting longer time frames."}]},{"deployed_at":"2026-01-06T18:07:37.752Z","entries":[{"pr":5434,"summary":"EXPLAIN: Support showing EXPLAIN plans containing JIT info using new (Postgres 17) format","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-01-08T01:21:41.761Z","entries":[{"pr":5428,"summary":"Plan Statistics: Improve display for queries that run infrequently","channels":["enterprise-server","cloud"],"description":"Previously the plan statistics graphs would show data points where the query didn't run with the dashed area marker, typically used for missing data for the whole database/server. Instead, the graphs now show zero at such points when there were other queries with activity on that database."}]},{"deployed_at":"2026-01-08T10:57:23.831Z","entries":[{"pr":5446,"summary":"Config Settings: Update bundled Postgres documentation to include Postgres 18","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-01-09T03:22:23.272Z","entries":[{"pr":5367,"summary":"Show warning when websocket connection is unhealthy","channels":["enterprise-server","cloud"],"description":"In 2024 the collector moved to a persistent websocket connection to reduce overhead and enable two-way communication. If your servers haven't been updated to a recent collector version or have networking issues that don't allow the connection to stay alive for at least an hour, you will now see an in-app warning. Later in 2026 we plan to drop the legacy API and require a websocket connection, so please reach out to support if you see this warning."}]},{"deployed_at":"2026-01-14T05:00:09.440Z","entries":[{"pr":5464,"summary":"VACUUM/ANALYZE Activity: Show autovacuum_vacuum_max_threshold value for Postgres 18+","channels":["enterprise-server","cloud"],"description":"The dead rows graph now takes autovacuum_vacuum_max_threshold into account when available, improving visibility into when autovacuum is expected to run."}]},{"deployed_at":"2026-01-14T16:10:58.332Z","entries":[{"pr":5339,"summary":"Require Postgres 14+ for the internal statistics database used by pganalyze Enterprise Server","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2026-01-14T17:50:29.931Z","entries":[{"pr":5468,"summary":"Schema Statistics: Fix tree map links to tables and indexes to preserve date range selection","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-01-14T20:24:47.812Z","entries":[{"pr":5469,"summary":"Fix GraphQL CSRF validation failing for installations using non-standard ports","channels":["enterprise-server"],"description":"The newly introduced CSRF validation in the 2026.01.0 Enterprise Server release did not work as expected in certain situations, specifically it always failed when a non-standard port (e.g. 8080) was used for the Enterprise Server installation, showing an \"Internal Server Error\" after logging in. This fixes the CSRF check to work as expected."}]},{"deployed_at":"2026-01-15T02:33:55.579Z","entries":[{"pr":5470,"summary":"Index Advisor: Fix some query links","channels":["enterprise-server","cloud"],"description":"This fixes some Index Advisor pages that had incorrectly-generated\nlinks to the queries involved."}]},{"deployed_at":"2026-01-20T18:42:21.627Z","entries":[{"pr":5472,"summary":"Fix occasional issues that caused parts of the app to be shown with","channels":["enterprise-server","cloud"],"description":"limited seven day retention instead of normal retention."}]},{"deployed_at":"2026-01-27T08:48:30.094Z","entries":[{"pr":5500,"summary":"Query Advisor: Avoid internal error when referenced EXPLAIN plans have aged out","channels":["enterprise-server","cloud"],"description":"On resolved Query Advisor issues you may not be able to access the associated EXPLAIN plan anymore (which is only retained for 7 days currently). Instead of showing an error, show a notice explaining this."}]},{"deployed_at":"2026-01-27T18:45:09.008Z","entries":[{"pr":5490,"summary":"Persist search input in query string","channels":["enterprise-server","cloud"],"description":"This allows users to navigate back to a page of filtered results\n(e.g., in the Query Performance list) and maintain the filtered list."}]},{"deployed_at":"2026-01-28T08:55:43.737Z","entries":[{"pr":5514,"summary":"Workbooks: Fix bug preventing use of manually created parameter sets","channels":["enterprise-server","cloud"],"description":"This bug in a recent change incorrectly prevented the creation of Workbooks that were using manually added parameters instead of query samples with an error like \"Either parameterSet, queryText, or querySampleIds is required\"."}]},{"deployed_at":"2026-01-29T03:01:32.879Z","entries":[{"pr":5485,"summary":"Connections: Update wait event name list to support Postgres 18","channels":["enterprise-server","cloud"],"description":"Previously, some wait event names were not appearing correctly on the Connections page and were shown as Unknown (e.g. `Activity / Unknown` instead of `Activity / BgwriterMain`).\n\nIn passing, update bundled collector from 0.67.0 to 0.68.1.  See the [collector changelog](https://github.com/pganalyze/collector/blob/main/CHANGELOG.md#0681------2026-01-28) for full details."}]},{"deployed_at":"2026-02-04T02:13:10.604Z","entries":[{"pr":5528,"summary":"Fix \"Replication - High Lag\" check-up graph rendering issue","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-02-06T21:41:49.837Z","entries":[{"pr":5542,"summary":"Cluster-aware Index Advisor: Fix accidental stale data to determine primary in cluster","channels":["enterprise-server","cloud"],"description":"A bug in the internal detection of which server is the primary in a cluster may have caused wrong data to show for Index Advisor running on a cluster."}]},{"deployed_at":"2026-02-10T01:14:21.205Z","entries":[{"pr":5539,"summary":"Connections: Improve performance with many connections","channels":["enterprise-server","cloud"],"description":"When the connection count at a given time exceeds thousands, the page was very slow or sometimes unable to load. Now it supports rendering multiple thousands of connections."}]},{"deployed_at":"2026-02-10T02:06:37.434Z","entries":[{"pr":5541,"summary":"Expand local collector configuration options","channels":["enterprise-server"],"description":"Add support for the api_cluster_id, max_buffer_cache_monitoring_gb, and ignore_schema_regexp collector settings with the local collector built-in with the pganalyze Enterprise Server container."}]},{"deployed_at":"2026-02-10T20:49:26.951Z","entries":[{"pr":5499,"summary":"Index Advisor: Add cluster-aware index recommendations","channels":["enterprise-server","cloud"],"description":"Index Advisor now aggregates scan data across all servers in a cluster when generating index recommendations. This provides more accurate recommendations by considering query stats from both primary and replica servers."}]},{"deployed_at":"2026-02-11T02:02:48.025Z","entries":[{"pr":5547,"summary":"Index Advisor: Support schema names with uppercase letters","channels":["enterprise-server","cloud"],"description":"Previously, when the referenced tables or functions are in the schema with uppercase letters, we were unable to run the query analysis of the query, therefore the Index Advisor was failing to run with such queries."}]},{"deployed_at":"2026-02-12T03:48:28.494Z","entries":[{"pr":5465,"summary":"Update base image for Enterprise Server to Ubuntu 24.04 (noble)","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2026-02-18T06:54:01.256Z","entries":[{"pr":5540,"summary":"Single Sign-On: Support SAML certificate update","channels":["enterprise-server","cloud"],"description":"When a SAML Identity Provider certificate is rotated or approaching expiration, it can now be updated directly from the Integrations page without needing to reconfigure the entire SAML integration. A warning banner is shown when the certificate expires within 14 days (or has already expired)."}]},{"deployed_at":"2026-02-18T22:48:55.469Z","entries":[{"pr":5572,"summary":"Index Advisor: Fix handling of fully qualified table names not in search path","channels":["enterprise-server","cloud"],"description":"Previously the query analysis process (part of Index Advisor) did not correctly handle such cases, leading to errors because the referenced tables could not be found."}]},{"deployed_at":"2026-02-19T00:49:36.464Z","entries":[{"pr":5563,"summary":"Improve server and database dropdown navigation to better support long server names","channels":["enterprise-server","cloud"],"description":"The server dropdown now dynamically sizes its width based on the longest server name, expanding up to the right edge of the database select. Primary and replica badges are visually distinct and always fully visible alongside server names."}]},{"deployed_at":"2026-02-19T02:21:41.230Z","entries":[{"pr":5573,"summary":"Query Details Page: Fix visual indication of times when query was not run, but other queries had activity","channels":["enterprise-server","cloud"],"description":"This was incorrectly showing as missing data (dashed grey area) due to a recent change, when it should have been showing as zero calls instead. This also avoids the graph becoming unreadable for infrequently run queries."}]},{"deployed_at":"2026-02-19T05:46:25.646Z","entries":[{"pr":5577,"summary":"Ensure JWT tokens generated by application use integers for \"exp\" field","channels":["enterprise-server","cloud"],"description":"The \"exp\" field was previously incorrectly serialized as a string in the JWT token, which is a violation of the JWT spec, and may cause issues with proxies between the application and the end-user browser."},{"pr":5578,"summary":"Index Advisor: Fix handling of table names that need quoting (uppercase, special characters, etc)","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-02-21T03:09:25.378Z","entries":[{"pr":5587,"summary":"GraphQL API: Add getQueryExplainFromTrace resolver to get EXPLAIN plans from \"db.postgresql.plan\" trace spans","channels":["enterprise-server","cloud"],"description":"When the pganalyze OpenTelemetry tracing integration is utilized, the pganalyze-collector will insert special links into the respective traces to link back to the full EXPLAIN plan in pganalyze. These links can be easily followed with a browser, but can be challenging for AI tools to resolve. To assist AI tools / MCP servers, provide a dedicated getQueryExplainFromTrace GraphQL resolver that takes the necessary arguments from the link (datname, timestamp, fingerprint) and returns an EXPLAIN plan."}]},{"deployed_at":"2026-02-25T03:38:11.623Z","entries":[{"pr":5594,"summary":"Fix Copy to Clipboard button not rendering in non-HTTPS environments","channels":["enterprise-server"],"description":"The Copy to Clipboard button previously required a secure context (HTTPS or localhost) and would not render at all in other environments. It now falls back to an alternative approach when the primary method is unavailable."}]},{"deployed_at":"2026-02-28T07:49:57.322Z","entries":[{"pr":5602,"summary":"Update combined collector to v0.69.0","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2026-03-04T16:59:40.154Z","entries":[{"pr":5487,"summary":"Query Details: Interpolate I/O and CPU time breakdown in time series if there are no calls for the given time slice","channels":["enterprise-server","cloud"],"description":"Since when there are no calls to a query, these values cannot be calculated, this was previously displayed in the same way as missing data, which could be confusing. Now we interpolate based on query stats before and after these periods of inactivity.\n\nBefore:\n<img width=\"2360\" height=\"1928\" alt=\"image\" src=\"https://changelog-staging.pganalyze.com/entries/pr-5487-2df0cd8a250694f126821855f0f85fe7c985907a/assets/6c510a95-4a84-400a-a65c-1ed77c4e70f0\" />\n\nAfter:\n<img width=\"2360\" height=\"1928\" alt=\"image\" src=\"https://changelog-staging.pganalyze.com/entries/pr-5487-2df0cd8a250694f126821855f0f85fe7c985907a/assets/8396efaa-b488-4e3f-9760-6d2f140ba99d\" />"}]},{"deployed_at":"2026-03-05T06:07:48.213Z","entries":[{"pr":5613,"summary":"Retire getQueryTagSummaryForQuery resolver","channels":["enterprise-server","cloud"],"description":"The `getQueryTagSummaryForQuery` resolver has been removed. Query tag summary is now available as a field on `QueryType`, so you can fetch it via `getQueryDetails` instead:\n\n```\ngetQueryDetails(databaseId: \"1234\", queryId: \"5678\") {\n  normalizedQuery\n  queryTagSummary(startTs: 1767193200, endTs: 1767196800) {\n    key\n    values {\n      value\n      count\n    }\n  }\n}\n```"}]},{"deployed_at":"2026-03-05T18:32:20.972Z","entries":[{"pr":5614,"summary":"Indexing Engine: Handle schema names that include single quotes","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-03-06T03:48:14.519Z","entries":[]},{"deployed_at":"2026-03-09T21:47:52.210Z","entries":[{"pr":5630,"summary":"Query details: Fix bug causing crash in CPU/IO graph due to track_io_timing=off","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-03-10T21:35:44.287Z","entries":[{"pr":5631,"summary":"JWT tokens: Set \"aud\" audience field to a non-null value","channels":["enterprise-server","cloud"],"description":"Previously the JWT token utilized by pganalyze for GraphQL requests contained a \"aud\" field set to \"null\", which can confuse some intermediary proxies. This will now always be set to \"pganalyze\"."}]},{"deployed_at":"2026-03-11T16:16:24.615Z","entries":[{"pr":5615,"summary":"Checks & Alerts: Do not alert about AlloyDB replicas with fsync=off","channels":["enterprise-server","cloud"],"description":"Also downgrade the alert to a warning if running on a non-AlloyDB\nreplica: this is still worth addressing (since an untimely crash could\nlead to having to rebuild the replica), but it's unlikely to be a\ncritical issue."}]},{"deployed_at":"2026-03-12T15:13:09.735Z","entries":[{"pr":5633,"summary":"Update Ruby version for Enterprise Server to 3.4.8","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2026-03-12T17:12:09.229Z","entries":[{"pr":5654,"summary":"Show Enterprise Server version in sidebar","channels":["enterprise-server"],"description":"This links to the Enterprise Server changelog that shows the latest\navailable version and the updates in each release."}]},{"deployed_at":"2026-03-12T20:35:48.599Z","entries":[{"pr":5643,"summary":"Query Performance: Change statement type filter to exclude DML when only SELECT is checked","channels":["enterprise-server","cloud"],"description":"Previously, any queries that included a SELECT component (like \"INSERT\n... SELECT\" or even \"INSERT ... VALUES\") were returned. Limiting to\nSELECT-only is more in line with what users expect from a filter like\nthis."}]},{"deployed_at":"2026-03-13T07:59:09.672Z","entries":[{"pr":5659,"summary":"Connections: Improve how Connection Traces listing responds to date range selection","channels":["enterprise-server","cloud"],"description":"Previously, the selected focus timestamp (the highlighted timestamp\nwithin the current date range) had inconsistent behavior when the date\nrange is updated, or the focus timestamp itself is updated by clicking\non the Wait Events or Connection States graphs.\n\nThis standardizes its behavior: when a labeled date range is selected\n(e.g., Last 24h), the selected focus timestamp for the Connection\nTraces listing is cleared. When an unlabeled date range is selected\n(whether from the date picker or by dragging on the graph), if the\nfocus timestamp falls within the new range, it remains unchanged. If\nit does not, it is reset to the value of the end of the range."}]},{"deployed_at":"2026-03-19T23:45:50.496Z","entries":[{"pr":5521,"summary":"Automated EXPLAIN: Improve plan parsing when auto_explain.log_format=text","channels":["enterprise-server","cloud"],"description":"This adds support for JIT output changes in newer Postgres versions and fixes worker\ndetail parsing when auto_explain.log_timing is disabled."}]},{"deployed_at":"2026-03-26T22:18:03.654Z","entries":[{"pr":5653,"summary":"Persist table sort order in query string","channels":["enterprise-server","cloud"],"description":"This allows users to navigate back to a page of sorted results (e.g., in the Query Performance list) and maintain the sort order."}]},{"deployed_at":"2026-04-01T17:09:11.430Z","entries":[{"pr":5685,"summary":"Database Dashboard: Show check-up status of all available checks","channels":["enterprise-server","cloud"],"description":"The check-up widget on the database dashboard now covers all check types. Previously, only some checks were shown. Each check group now also displays the number of active issues."}]},{"deployed_at":"2026-04-01T17:52:44.070Z","entries":[{"pr":5709,"summary":"Restore right-aligned column headers in some tables","channels":["enterprise-server","cloud"],"description":"The right-alignment was accidentally dropped recently."}]},{"deployed_at":"2026-04-09T21:34:08.859Z","entries":[{"pr":5718,"summary":"Expire organization invitations after seven days","channels":["enterprise-server","cloud"],"description":"Invitations now expire after seven days. Invitations can be resent\n(before or after they expire) which resets the expiration timer."}]},{"deployed_at":"2026-04-14T04:13:41.136Z","entries":[{"pr":5747,"summary":"Update combined collector to v0.70.0","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2026-04-28T01:05:46.868Z","entries":[{"pr":5789,"summary":"Index Advisor: Fix multiple issues where query analysis fails with \"internal error\"","channels":["enterprise-server","cloud"],"description":null},{"pr":5762,"summary":"VACUUM Advisor: Fix missing bloat data / incorrect last autovacuum date in per-table bloat table","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-04-29T21:28:36.520Z","entries":[{"pr":5793,"summary":"Collector Settings: Add collector settings page, with error and connection history","channels":["enterprise-server","cloud"],"description":"The collector settings previously lived on the server settings page. Now on their own page,\nwe also show a history of collector or data processing errors, as well as a connection history\nto make it easier to see if there are issues with your collector."}]},{"deployed_at":"2026-04-30T17:05:14.155Z","entries":[{"pr":5796,"summary":"System statistics: Support 100 day retention for Enterprise plans","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-05-01T05:12:09.956Z","entries":[{"pr":5803,"summary":"EXPLAIN: Fix occasional errors in comparison when \"Select plans\" is clicked","channels":["enterprise-server","cloud"],"description":"Currently, clicking \"Select plans\" on a plan comparison page can lead\nto an error when the already-selected plans have aged out of the\nselected date range. This change fixes that error and omits\npre-selecting the existing plans in the list in that case (selection\ncan be canceled to return to the previously-selected plans)."}]},{"deployed_at":"2026-05-02T01:33:17.199Z","entries":[{"pr":5792,"summary":"Query Advisor: Improve rewriting for more complex expressions/queries","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-05-06T17:28:57.785Z","entries":[{"pr":5823,"summary":"Navigation: Show the primary/replica role badge directly next to the server name for consistency","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-05-07T01:40:55.002Z","entries":[{"pr":5785,"summary":"Query Advisor: Introduce insight to show queries spilling to disk due to low work_mem","channels":["enterprise-server","cloud"],"description":"Detects Sort and Hash nodes that fall back to using temporary files because work_mem was too small. The legacy \"Sort Spills to Disk\" and \"Too Many Hash Batches\" annotations on EXPLAIN plans are now hidden for Query Advisor users to avoid duplication."},{"pr":5805,"summary":"Introduce pganalyze MCP Server (Public Preview)","channels":["enterprise-server","cloud"],"description":"The new MCP Server is now available for everyone on current Production, Scale and Enterprise plans, allowing you to easily query pganalyze data from AI tools of choice, such as Claude Code. It is enabled by default on new accounts, and can be enabled for existing accounts by going to \"Settings\", \"API Access\". Learn more details in the [announcement](https://pganalyze.com/blog/mcp-server-public-preview) and [documentation](https://pganalyze.com/docs/mcp)."}]},{"deployed_at":"2026-05-12T21:08:32.916Z","entries":[{"pr":5847,"summary":"Settings: Display the Cluster ID on the Server Settings page in the Debug Info panel","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-05-13T13:17:30.922Z","entries":[{"pr":5838,"summary":"Query Tags: Improve parsing and skip invalid tags","channels":["enterprise-server","cloud"],"description":"Tags using `=` as the key-value delimiter while also using `:` in the tag value are now properly parsed. For example `/* requestId=service:job:task */` is now parsed as a `requestId` tag with the value `service:job:task`. Previously it would be parsed as a `requestId=service` tag with the value `job:task`.\n\nAdditionally, tags now have stricter requirements. Tags whose key or value are empty are now skipped. Tag keys must only contain alphanumeric characters, periods, underscores, and dashes, matching the regular expression `[a-zA-Z0-9._-]`."}]},{"deployed_at":"2026-05-14T01:03:44.982Z","entries":[{"pr":5853,"summary":"Introducing Server Groups for Postgres clusters and Cluster-Wide Query Performance","channels":["enterprise-server","cloud"],"description":"pganalyze now automatically detects server groups based on the Postgres cluster relationship, or when manually setting them in the collector. Server Groups are shown as their own distinct resource in the navigation's server dropdown, Dashboard, Query Performance, and Settings pages. Learn more in the [blog\n  post](https://pganalyze.com/blog/server-groups-and-cluster-wide-query-performance).\n\nHere is an example of the new dashboard for Server Groups that renders clusters as a tree, with counts for open issues and databases:\n\n<img width=\"1512\" height=\"818\" alt=\"server-groups-dashboard\" src=\"https://changelog-staging.pganalyze.com/entries/pr-5853-e34f92052858f9e360a457c69e889d6e7ee027d0/assets/e125c5c2-6d97-40b7-84f6-5da8c4b586b5\" />"}]},{"deployed_at":"2026-05-15T05:18:02.612Z","entries":[{"pr":5837,"summary":"EXPLAIN: Consolidate metric selection between grid view and plan comparison","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-05-19T20:16:24.682Z","entries":[{"pr":5868,"summary":"Server Groups: Refine server group navigation and display","channels":["enterprise-server","cloud"],"description":"When a server group is added to recents in the server dropdown, its server members are now also added for quick access. Additionally, sorting server groups in Dashboard updates the url bookmarks and sharing."},{"pr":5877,"summary":"Browse workbooks at organization, server group, server or database scope","channels":["enterprise-server","cloud"],"description":"Workbooks is now reachable from the side nav at every scope, with a New Workbook button that prompts for a server and database when needed."}]},{"deployed_at":"2026-05-22T01:13:49.999Z","entries":[{"pr":5892,"summary":"Update bundled pganalyze-collector to v0.70.2","channels":["enterprise-server"],"description":null}]},{"deployed_at":"2026-05-26T23:02:59.471Z","entries":[{"pr":5906,"summary":"Avoid showing data points that are too far from the cursor in graph tooltips","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-06-03T22:30:52.936Z","entries":[{"pr":5896,"summary":"Server Groups: Support custom display names","channels":["enterprise-server","cloud"],"description":"Cluster-based server groups can now be renamed from the new Server Group Settings page. Updates to display name will not change the underlying cluster id. Empty names fall back to the cluster id."}]},{"deployed_at":"2026-06-09T01:20:09.120Z","entries":[{"pr":5911,"summary":"Add ability to hide columns in some tables","channels":["enterprise-server","cloud"],"description":"This allows giving more space to more important columns (like query)."}]},{"deployed_at":"2026-06-11T15:42:29.080Z","entries":[{"pr":5927,"summary":"System: Graph WAL size on WAL & Replication tab","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-06-12T15:16:02.715Z","entries":[{"pr":5941,"summary":"Query Performance: Guard against all statement types being turned off","channels":["enterprise-server","cloud"],"description":"Previously, this could lead to all query performance data being\nhidden, and the mechanism to choose different statement types being\nhidden as well. This required manually clearing browser LocalStorage\nfor pganalyze to restore.\n\nThe change guards against all statement types being turned off, and\nautomatically turns on SELECT statements for users who may have\npreviously turned off all statement types."}]},{"deployed_at":"2026-06-17T23:24:45.793Z","entries":[{"pr":5910,"summary":"Allow exporting the generated collector configuration file","channels":["enterprise-server"],"description":"This adds a export button to the Collector Settings page for the configuration file generated by the integrated collector (the collector that runs inside the Enterprise Server container). Exports are restricted to organization admins.\n\nThis allows you to reuse the existing collector configuration from the integrated collector when setting up a separate collector installation."}]},{"deployed_at":"2026-06-19T00:34:27.248Z","entries":[{"pr":5880,"summary":"Workbooks: Suggest queries to start from on the New Workbook page","channels":["enterprise-server","cloud"],"description":"Previously the New Workbook page showed only an empty SQL editor, leaving users without a query in mind to figure out the next step on their own. The page now lists the database's top 10 SELECT queries by % of total runtime over the last 24 hours; clicking any row starts a workbook pre-filled with that query."}]},{"deployed_at":"2026-06-23T04:21:48.812Z","entries":[{"pr":5960,"summary":"Query Performance: Fix search box losing focus while typing","channels":["enterprise-server","cloud"],"description":"Searching the query list no longer drops focus after each keystroke,\nand a search with no matches now shows an empty table instead of an\nunrelated setup hint."}]},{"deployed_at":"2026-06-25T16:06:04.424Z","entries":[{"pr":5787,"summary":"Query Advisor: New Inefficient Index Use insight","channels":["enterprise-server","cloud"],"description":"This insight detects Index Scan nodes that read many rows only to discard most of them at the filter, and reports when a different existing index exists that could be a better match."}]},{"deployed_at":"2026-06-25T22:01:48.494Z","entries":[{"pr":5979,"summary":"Integrations: Fix Slack integration setup","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-06-26T06:45:42.328Z","entries":[{"pr":5981,"summary":"Fix table sorting on Connections page","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-06-26T20:29:02.127Z","entries":[{"pr":5984,"summary":"Unused index check: Raise maximum look back period from 35 days to 400 days","channels":["enterprise-server","cloud"],"description":"This allows configuring the unused index threshold to be significantly higher, to avoid incorrectly flagging indexes that are used e.g. once a year. The default remains at 35 days."}]},{"deployed_at":"2026-06-30T08:23:14.739Z","entries":[{"pr":5991,"summary":"Index Advisor: Support uppercase column names in extended statistics","channels":["enterprise-server","cloud"],"description":null}]},{"deployed_at":"2026-07-01T04:48:19.289Z","entries":[{"pr":5994,"summary":"Graphs: Persist series selection (from legend) across navigation","channels":["enterprise-server","cloud"],"description":"The selection can be reset to defaults with a full-page reload."}]},{"deployed_at":"2026-07-09T07:45:36.365Z","entries":[{"pr":5997,"summary":"Query Advisor: New Late Join Filter with OR Insight","channels":["enterprise-server","cloud"],"description":"This insight detects joins with an OR condition that spans both joined tables, which prevents Postgres from using an index on either side and forces it to filter after joining, and reports when existing indexes could support rewriting the query as a UNION."}]}]}