Liferay Portal 7.4 GA112 and Liferay Commerce 4.0 GA112 Release

We are pleased to announce the release of Liferay Portal 7.4 GA112 and Liferay Commerce 4.0 GA112!

Caption

Download options

Liferay Portal and Liferay Commerce share the same Bundle and Docker image.  To get started using either Liferay Portal or Liferay Commerce, choose the best download option suited for your environment below.

Docker image

To use Liferay Portal 7.4 GA112:

docker run -it -p 8080:8080 liferay/portal:7.4.3.112-ga112

Bundles and other download options

If you are used to binary releases, you can find the Liferay Portal 7.4 GA112 and Liferay Commerce 4.0 GA112 release on the download page.  If you need additional files (for example, the source code, or dependency libraries), visit the release page.

Dependency Management

For development using the Liferay Platform, update Liferay Workspace to use the  lat est dependencies, by adding the following line to the build.gradle file:

dependencies {
	compileOnly group: "com.liferay.portal", name: "release.portal.api"
}

All portal dependencies are now defined with a single declaration. When Ausing an IDE such as Eclipse or IntelliJ all apis are immediately available in autocomplete for immediate use.  

By setting a product info key property it will be possible to update all dependencies to a new version by updating the liferay.workspace.product property in the liferay workspace projects gradle.properties file:

liferay.workspace.product = portal-7.4-ga112

When using an IDE such as Eclipse or IntelliJ all apis are immediately available in autocomplete for immediate use.

Features

Commerce

Refunds

Feature Status: Release

Provides the ability for the Order Manager to make refunds against on-line payments using the stand alone payment gateway. While the refund amount can be configurable, the refund is always made against the payment method of the original payment.

Documentation: ​​​​​​​ Payment Management

Organisation Management Chart Enhancements

Feature Status: Release

New link added to the chart from the organisation management admin pages. Chart now supports search functionality. Users with permissions can view or edit more details of the Organisation, Account or User when you select them on the chart.

Documentation: Using the New Organization Management Chart Widget

Channel Restrictions

Feature Status: GA

Users now have the ability to restrict channel access to certain Accounts via the eligibility tab on the channel admin pages. The ability to restrict certain Account Address to be used on certain channels has also been added. This is managed via an Eligibility tab on the address that allows the user set channel usage.

Documentation: Channels Reference Guide

Configurable Product Options

Feature Status: Release

Use the platform's configurable purchasing rules to dictate which product options need to purchased together when setting up products with options. You can set which product options must be purchased together and/or which product options cannot be combined together to create a valid product bundle. You can also limit the number of products from a particular group of products that can be purchased together.

Extending Permissions with "Channel Default" tab being able to activate/inactivate

Feature Status: GA

Two new permissions added to View and Edit the Channel Defaults Tab on the Account Management Pages.

Documentation:​​​​​​​ Setting Channel Defaults

Edit Product Bundles in the Mini-Cart\

Feature Status: Release

​​​​​​​The ability for a buyer or sales agent to edit a product bundle directly from the mini-cart has now been added. Previously, if a change had to be made the bundle had to be deleted from the cart and added again. This allows for more speedy alterations to be made before proceeding with check out.

Documentation: ​​​​​​​ Editing Bundles from the Mini Cart

Increasing database AccountEntry.name column character limit

Feature Status: GA

The allowable size of an Account Name has been increased to 250 characters in line with industry standards

Documentation: Creating an Account​​​​​​​

Standalone Payment Gateway & Client Extension

Feature Status: GA

Decoupling the payment gateway from the order engine in order to allow you to capture payments against objects and to support new payment methods via client extension

Documentation: Using the Payment Integration Client Extension

Shipping Method Client Extension

Feature Status: GA

Ability to add new remote shipping calculations via client extension

Documentation: Using the Shipping Engine Client Extension

Client Extension for custom checkout steps

Feature Status: Release

Ability to add new steps to the checkout process via client extension

Normal: Using the Checkout Step Client Extension

Business Process Management

Auto-Increment Object Fields

Feature Status: Release

Users can add read-only fields to object definitions that automatically increment for each new entry.

Key Features:

  1. Customize Starting values - Users can set a starting value. This flexibility allows for better alignment with specific business needs and workflows

  2. Customize labels - Users can set prefixes and suffixes to provide alphanumeric keys appended to the incrementing values

Documentation: Auto-Increment Fields

Validate using CurrentDate

Feature Status: GA

​​​​​When adding validations in Objects, many times is necessary to validate dates against the current date.

Key Features:

  1. Dynamic Date Comparison - Users can compare a selected date with the current system date. This empowers you to create rules that trigger based on the relationship between a date field and the present date.

  2. Versatile Date Range Checks - Validate whether a date falls within a specified date range relative to the present date

Documentation: Expression Builder Validations Reference

Validate Uniqueness of Object Fields ​​​​​​

Feature Status: Release

Users can add validations that verify field values, when used in combination, are unique.

Limitation:
Numeric fields such as Integer, Long Integer, Decimal, Precision Decimal will be stored as null.

Documentation: Using Composite Key Validations

Validate Relationship Names

Feature Status: GA

Validate relationships to prevent duplicate names in child objects.

Documentation: Defining Object Relationships

Support for account restriction in Elastic Search\

Feature Status: GA

Now, in applications that have data restricted by account, users are able to properly search in the portal using the Search widget.

Documentation:

Experience Management

Case-Sensitive Tags

Feature Status: Release

We've introduced case-sensitive tagging for page creators, allowing tags to be saved and displayed exactly as created, whether in uppercase or lowercase. The feature ensures case sensitivity for tag creation, case-insensitive searching, and autocomplete, while maintaining backward compatibility for existing tags.

https://liferay.atlassian.net/browse/LPS-194362

Enhanced Web Content Management experience to make it easier for Content Creators to manage daily content

Feature Status: Release

In response to user feedback, several enhancements have been introduced for content creators. The first functionality addresses the challenge of easily finding and managing Web Content created within specific structures, allowing creators to review and edit content more efficiently. The rest of functionalities enable refined filtering and searching options, including the ability to search in the title, filter by categories and tag, filter search results and multi-select filters.

Asset Library Vocabulary configuration to be required on the Sites Connected

Feature Status: GA

We have introduced a configuration feature within the Asset Library, enabling users to decide whether a Vocabulary created there is solely required at the Asset Library level or if it extends to the connected Sites as well.

https://liferay.atlassian.net/browse/LPS-202016

Set file size limit at asset library level

Feature Status: GA

This development introduces the ability for the user to set the file size at asset library’s level. This settings will override the already existing one at System level when the latter is bigger. As general rule, when both are set the lowest applies.

https://liferay.atlassian.net/browse/LPS-188033

Documents Library Preview

Feature Status: GA

To reduce the maintenance costs of providing a full document’s preview, the following changes are being introduced:

  • No preview available” state when the file size exceeds the preview size limit

  • Merge “File Entries” and “PDF Preview” settings under “File Preview Limits”


     

  • Rename "File Size Limits" to "File Upload Limits" with a reviewed and more understandable Description copy


     

  • The user is being informed that the generated preview may not correspond to the entire document

    ​​​​​​​

https://liferay.atlassian.net/browse/LPS-175868

Expanded features for Copy Documents and Folders

Feature Status: GA

As sequel to epic LPS-182512, this development aims to provide the user the following abilities:

  • Configuration of document size for copying in D&M

    ​​​​​​​
  • Bulk copying of documents and folders

    ​​​​​​​
  • Currently the copy action for documents and folders is able to be performed in Portal without fully respecting the site-asset library relationship. The expected behavior is:

    • An asset library must be connected to a site in order to copy a document over to the site

    • A document cannot be copied from a site to an asset library (only the other way around)

    We can enforce a stricter check when performing the copy action between asset libraries and sites. Instead of the end user receiving a success message when copying a document to a disconnected site, an error message should appear telling the user to set the connection first.

  • Document Types contained in a document are being copied in Documents and Media so that they can be easily re-used

    ​​​​​​​
    ​​​​​​
  • Categories and Tags in Documents and Media are being automatically copied so that
    so that they can be easily re-used on a new site

https://liferay.atlassian.net/browse/LPD-16751

Schedule and Delete Knowledge Base Articles

Feature Status: Release

With this development, the publication of Knowledge Base articles will be schedulable, in particular, the feature is so designed:

  • The primary Publish button will have an arrow down with the “Publish” option, that will immediately publish the article, and the “ Schedule ” one.

    ​​​​​​​
  • Clicking the Schedule option, will make a modal appearing so the user can set a date and time for the article to be published.
    ​​​​​​​

  • The Scheduled article will have the SCHEDULED status that will change to Approved on the scheduled date

  • A tooltip with the scheduled date information will appear when hovering the question-circle-full icon placed next to the scheduled state.

    ​​​​​​​
  • Editing a scheduled article will provide the user the ability, by clicking the primary button that has turned into “ Scheduled ”, to:

    • Cancel the operation

    • Publish Now

    • Schedule: this option will save the article, date & time changes and the user will return to the previous screen before entering edit mode

 

​​​​​​​

  • Additional feature: A Knowledge Base article deletion action will move it to the Recycle Bin so that it can be restored.

https://liferay.atlassian.net/browse/LPS-188058

Content Publishing

Improve performance of large publications with Liferay’s caching framework

Feature Status: GA

The goal of the epic is to leverage the functions of Liferay’s caching framework. Our current measurements indicate 10%-30% performance increase in database writing operations, also 10 times faster reading performance!

https://liferay.atlassian.net/browse/LPD-10782

Frontend Infrastructure

Management Toolbar UX Improvements

Feature Status: GA

The user experience of the Management Toolbar present in multiple applications (Web Content, Blogs, Documents & Media) has been improved:

  • Separate sections for filter and order.

  • Changed “+” with “New” for clarity.

  • Moved info icon to the right.


 

https://liferay.atlassian.net/browse/LPS-144527

Customize Rich Text Editors Configurations through Client Extensions

Feature Status: Release

Now, admins can customize the configuration of the Rich Text Editors with this new client extension, allowing them to set the toolbars that are available on different applications. In the form, you will have to define the instances in which the configuration will be taken into account as well as the JS that contains the configuration:


 

https://liferay.atlassian.net/browse/LPS-186870

Content Security Policies accept stricter policies for Javascript resources

Feature Status: Beta

We refactored the way Liferay scripts were managed, so admins can define stricter policies like:

script-src '[$NONCE$]'; script-src-attr 'unsafe-inline';

Limitations: If a policy like the one above is configured, the parts of the product that uses a rich-text editor will not work correctly. Analyze your scenario to identify how strict your policy can be in order to make the solution work.

https://liferay.atlassian.net/browse/LPS-178065

Make session.timeout.auto properties available as configurations

Now users can configure the values for the following properties from settings (system, instance or site settings):

  • session.timeout.auto.extend

  • session.timeout.auto.extend.offset​​​​​​​

​​​​​

Beware that now the properties are no longer available in portal-ext.properties

https://liferay.atlassian.net/browse/LPS-167626​​​​​​​

Mechanism to manage the user consent for 3rd Party Cookies

Feature Status: GA

Pages served by Liferay might make use of third party cookies. In order to inform Liferay to manage them as part of the user cookie consent, now Portal developers and Content creators have a way to indicate the portal about them.
 

In order to make Liferay aware of them, the content creator or portal developer will need to update the markup to the following:

First, indicate the type of cookie following this format:

 

Second, change the markup depending on the element affected:

​​​​​​​
 
 

For example, embedding a video from a video provider, will see the markup changed in the following way:

Before:

<iframe src="..." />


After:

<iframe data-src="..." `data-third-party-cookie="CONSENT_TYPE_FUNCTIONAL" />

​​​​​​​https://liferay.atlassian.net/browse/LPS-154290

Headless

API Builder: new endpoint to retrieve a single entry

Feature Status: Beta

We continue to improve the API Builder by adding a new endpoints: GET single element.

With the GET single element new endpoint, we allow users to create a GET endpoint that only retrieves a single element using a path parameter.

One particular thing is that users can select as path parameter any unique custom field defined in the object apart from ID and External Reference Code.

​​​​​​​

https://liferay.atlassian.net/browse/LPS-170000

API Builder: new endpoint to create entries of the main custom object

Feature Status: Beta

New POST endpoint inside API Builder to add the possibility not only of recovering information of the entries but also of creating them.

As in the GET methods, user can define the schema to use for the request and the response. Both can be the same or two different ones. And can even be one already used previously on another endpoint definition.

Company and Site scope is available too.

POST method only works for creating new entries of the main object . No entries for the related objects can be created yet at the same time.

 

https://liferay.atlassian.net/browse/LPS-182878

Data Migration Center: support for Object entries at site level

Feature Status: Beta

Under all supported formats, users can select the origin and destination site of the data so it's possible to export and import object entries between any site.

https://liferay.atlassian.net/browse/LPS-196018

Data Migration Center: support for CSV files to export and import object entries

Feature Status: Beta

With this improvement, the Data Migration Center allows users to export and import Object Entries using CSV files. Not all field types are supported but many of the most used ones are:

Supported field types: dateandtime, date, decimal, integer, longint, longtext, precissiondecimal, richtext, text and picklist.
​​​​​​​

In order to help users, only supported fields are available for exporting at the UI. As new types are allowed, they will appear available in the UI.

 

https://liferay.atlassian.net/browse/LPS-172870

Application Security

Provide SCIM (System for Cross-domain Identity Management) Adapter

Feature Status: Beta

SCIM provides a unified, RFC compliant way to keep user/group data in sync between different applications. Liferay is a service provider and enables clients to be connected. Though the defined RESTful APIs and schemas, clients can perform CRUD operations to keep resources in sync.

https://liferay.atlassian.net/browse/LPS-96845

Complete SCIM (System for Cross-domain Identity Management) Adapter

Feature Status: Beta

With this feature we extending the SCIM implementation with User Group un/provisioning as well with the User Group membership un/provisioning

https://liferay.atlassian.net/browse/LPS-201188

Captcha authentication via Headless API

Feature Status: Release

Previously customers would add captchas using a TagLib. But this is no longer useful because customers are not deploying JSPs. The Captcha API enables this functionality to be used in arbitrary contexts.

https://liferay.atlassian.net/browse/LPS-185150

Core Upgrades

Upgrade Report output directory is now configurable 

Feature Status: GA

When the Upgrade Report is enabled, the output directory of the report can be configured with the new portal property upgrade.report.dir


If this property is not set, the upgrade report can be found in the default directory:

  • portal-tools-db-upgrade-client/reports for the upgrade tool.

  • {liferay-home}/reports if upgrade was executed on startup.

Documentation: Upgrade Report through the Upgrade Tool

Documentation

All documentation for Liferay Portal and Liferay Commerce can now be found on our documentation site: learn.liferay.com.  For more information on upgrading to Liferay Portal 7.4 GA112 see refer to the Upgrade Overview.

Compatibility Matrix

Liferay's general policy is to test Liferay Portal and Liferay Commerce  against newer major releases of operating systems, open source app servers, browsers, and open source databases (we regularly update the bundled upstream libraries to fix bugs or take advantage of new features in the open source we depend on). 

Liferay Portal 7.4 GA112 and Liferay Commerce 4.0 GA112 were tested extensively for use with the following Application/Database Servers: 

Application Server

  • Tomcat 9.0

  • Wildfly 18.0, 23.0

Database

  • MySQL 5.7, 8.0

  • MariaDB 10.2, 10.4, 10.6

  • PostgreSQL 12.x, 13.x, 14.x, 15.x

JDK

  • IBM J9 JDK 8

  • Oracle JDK 8

  • Oracle JDK 11

  • All Java Technical Compatibility Kit (TCK) compliant builds of Java 11 and Java 8

Search Engine Compatibility Matrix

Source Code

Source is available as a zip archive on the release page, or on its home on GitHub.

Bug Reporting

If you believe you have encountered a bug in the new release you can report your issue by following the bug reporting instructions.

Getting Support

Support is provided by our awesome community. Please visit getting started for more details on how you can receive support.

Fixes and Known Issues

Blogs

Awesome blog which helps to piece together different parts of liferay which can sometimes be talked in different contexts and seeing them used together is much appreciated.

Hello! As Sergey Shishov also wrote, it is not possible to update liferay.workspace.product property in the liferay workspace projects gradle.properties file with version 7.4 GA112:

--- D:\dev\liferay\7.4.3.112-ga112\dev-apps>blade init -l  <----- ! dxp-7.4-u112 dxp-7.4-u102 dxp-7.4-u92 dxp-7.3-u35 dxp-7.2-sp8 dxp-7.1-sp8 dxp-7.0-sp17 portal-7.4-ga107 <----- ! ​​​​​​​---

The update from GA106 to GA112 using PostgreSQL failed.

2024-03-20 10:25:41.951 INFO  [main][UpgradeProcess:119] Upgrading com.liferay.layout.internal.upgrade.v1_4_1.LayoutClassedModelUsageUpgradeProcess 2024-03-20 10:25:41.952 INFO  [main][LoggingTimer:74] Starting com.liferay.layout.internal.upgrade.v1_4_1.LayoutClassedModelUsageUpgradeProcess#doUpgrade 2024-03-20 10:25:41.993 INFO  [main][LoggingTimer:35] Completed com.liferay.layout.internal.upgrade.v1_4_1.LayoutClassedModelUsageUpgradeProcess#doUpgrade in 41 ms 2024-03-20 10:25:41.995 INFO  [main][UpgradeProcess:137] Failed upgrade process com.liferay.layout.internal.upgrade.v1_4_1.LayoutClassedModelUsageUpgradeProcess in 44 ms 2024-03-20 10:25:41.999 ERROR [main][UpgradeExecutor:333] Failed upgrade process for module com.liferay.layout.service com.liferay.portal.kernel.log.LogSanitizerException: com.liferay.portal.kernel.upgrade.UpgradeException: java.lang.Exception: Unable to create layout classed model usages for fragment entry links     at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:128) ~[portal-kernel.jar:?]     at com.liferay.portal.upgrade.internal.executor.UpgradeExecutor._executeUpgradeInfos(UpgradeExecutor.java:202) ~[?:?]     at com.liferay.portal.upgrade.internal.executor.UpgradeExecutor.executeUpgradeInfos(UpgradeExecutor.java:124) ~[?:?]     at com.liferay.portal.upgrade.internal.executor.UpgradeExecutor.execute(UpgradeExecutor.java:85) ~[?:?]     at com.liferay.portal.upgrade.internal.executor.UpgradeExecutor$UpgradeStepRegistratorServiceTrackerCustomizer.addingService(UpgradeExecutor.java:330) ~[?:?]     at com.liferay.portal.upgrade.internal.executor.UpgradeExecutor$UpgradeStepRegistratorServiceTrackerCustomizer.addingService(UpgradeExecutor.java:290) ~[?:?]     at com.liferay.osgi.service.tracker.collections.internal.map.ServiceTrackerMapImpl$DefaultEmitter.emit(ServiceTrackerMapImpl.java:200) ~[com.liferay.osgi.service.tracker.collections.jar:?]     at com.liferay.portal.upgrade.internal.executor.UpgradeExecutor.lambda$activate$0(UpgradeExecutor.java:179) ~[?:?]     at com.liferay.osgi.service.tracker.collections.internal.map.ServiceTrackerMapImpl$ServiceReferenceServiceTrackerCustomizer.addingService(ServiceTrackerMapImpl.java:256) [com.liferay.osgi.service.tracker.collections.jar:?]     at com.liferay.osgi.service.tracker.collections.internal.map.ServiceTrackerMapImpl$ServiceReferenceServiceTrackerCustomizer.addingService(ServiceTrackerMapImpl.java:244) [com.liferay.osgi.service.tracker.collections.jar:?]     at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:321) [org.eclipse.osgi.jar:?]     at com.liferay.osgi.service.tracker.collections.internal.ServiceTrackerManager.open(ServiceTrackerManager.java:58) [com.liferay.osgi.service.tracker.collections.jar:?]     at com.liferay.osgi.service.tracker.collections.internal.map.ServiceTrackerMapImpl.<init>(ServiceTrackerMapImpl.java:65) [com.liferay.osgi.service.tracker.collections.jar:?]     at com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMapFactory.openSingleValueMap(ServiceTrackerMapFactory.java:177) [com.liferay.osgi.service.tracker.collections.jar:?]     at com.liferay.portal.upgrade.internal.executor.UpgradeExecutor.activate(UpgradeExecutor.java:174) [bundleFile:?]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]     at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]     at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:228) [bundleFile:?]     at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41) [bundleFile:?]     at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:664) [bundleFile:?]     at org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:510) [bundleFile:?]     at org.apache.felix.scr.impl.inject.methods.ActivateMethod.invoke(ActivateMethod.java:310) [bundleFile:?]     at org.apache.felix.scr.impl.inject.methods.ActivateMethod.invoke(ActivateMethod.java:300) [bundleFile:?]     at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:341) [bundleFile:?]     at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:114) [bundleFile:?]     at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:983) [bundleFile:?]     at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:956) [bundleFile:?]     at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:901) [bundleFile:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:519) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:460) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:616) [org.eclipse.osgi.jar:?]     at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:73) [bundleFile:?]     at org.apache.felix.scr.impl.inject.BindParameters.getServiceObject(BindParameters.java:47) [bundleFile:?]     at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:519) [bundleFile:?]     at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2308) [bundleFile:?]     at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1162) [bundleFile:?]     at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1576) [bundleFile:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1037) [bundleFile:?]     at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:936) [bundleFile:?]     at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:901) [bundleFile:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:519) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:460) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:616) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.ServiceTracker.addingService(ServiceTracker.java:416) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) [org.eclipse.osgi.jar:?]     at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:903) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:893) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:799) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:125) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:224) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:461) [org.eclipse.osgi.jar:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:906) [bundleFile:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:892) [bundleFile:?]     at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:128) [bundleFile:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:962) [bundleFile:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:732) [bundleFile:?]     at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1053) [bundleFile:?]     at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1007) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1216) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1137) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:944) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:880) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1168) [bundleFile:?]     at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:124) [bundleFile:?]     at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:893) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:799) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:125) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:224) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:461) [org.eclipse.osgi.jar:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:906) [bundleFile:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:892) [bundleFile:?]     at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:128) [bundleFile:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:962) [bundleFile:?]     at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:732) [bundleFile:?]     at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1053) [bundleFile:?]     at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1007) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1216) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1137) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:944) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:880) [bundleFile:?]     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1168) [bundleFile:?]     at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:124) [bundleFile:?]     at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:893) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:799) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:125) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:224) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:461) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:479) [org.eclipse.osgi.jar:?]     at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:986) [org.eclipse.osgi.jar:?]     at com.liferay.portal.tools.DBUpgrader._registerModuleServiceLifecycle(DBUpgrader.java:410) [portal-impl.jar:?]     at com.liferay.portal.tools.DBUpgrader.upgradeModules(DBUpgrader.java:234) [portal-impl.jar:?]     at com.liferay.portal.tools.DBUpgrader.main(DBUpgrader.java:170) [portal-impl.jar:?]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]     at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]     at com.liferay.portal.tools.db.upgrade.client.DBUpgraderLauncher.main(DBUpgraderLauncher.java:45) [com.liferay.portal.tools.db.upgrade.client.jar:?] Caused by: com.liferay.portal.kernel.log.LogSanitizerException: java.lang.Exception: Unable to create layout classed model usages for fragment entry links     at com.liferay.portal.kernel.dao.db.BaseDBProcess._processConcurrently(BaseDBProcess.java:636) ~[portal-kernel.jar:?]     at com.liferay.portal.kernel.dao.db.BaseDBProcess.processConcurrently(BaseDBProcess.java:417) ~[portal-kernel.jar:?]     at com.liferay.portal.kernel.dao.db.BaseDBProcess.processConcurrently(BaseDBProcess.java:389) ~[portal-kernel.jar:?]     at com.liferay.layout.internal.upgrade.v1_4_1.LayoutClassedModelUsageUpgradeProcess.doUpgrade(LayoutClassedModelUsageUpgradeProcess.java:61) ~[?:?]     at com.liferay.portal.kernel.upgrade.UpgradeProcess.lambda$upgrade$0(UpgradeProcess.java:122) ~[portal-kernel.jar:?]     at com.liferay.portal.db.partition.util.DBPartitionUtil.forEachCompanyId(DBPartitionUtil.java:178) ~[portal-impl.jar:?]     at com.liferay.portal.dao.db.BaseDB.process(BaseDB.java:465) ~[portal-impl.jar:?]     at com.liferay.portal.kernel.dao.db.BaseDBProcess.process(BaseDBProcess.java:378) ~[portal-kernel.jar:?]     at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:107) ~[portal-kernel.jar:?]     ... 114 more Caused by: com.liferay.portal.kernel.log.LogSanitizerException: org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = integer_  Hint: No operator matches the given name and argument types. You might need to add explicit type casts._  Position: 104 [Sanitized]     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2676) ~[postgresql.jar:42.4.3]     at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2366) ~[postgresql.jar:42.4.3]     at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:356) ~[postgresql.jar:42.4.3]     at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:496) ~[postgresql.jar:42.4.3]     at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:413) ~[postgresql.jar:42.4.3]     at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:190) ~[postgresql.jar:42.4.3]     at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:134) ~[postgresql.jar:42.4.3]     at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[hikaricp.jar:?]     at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[hikaricp.jar:?]     at com.liferay.layout.internal.upgrade.v1_4_1.LayoutClassedModelUsageUpgradeProcess._hasFragmentEntryLinkLayoutClassedModelUsages(LayoutClassedModelUsageUpgradeProcess.java:240) ~[?:?]     at com.liferay.layout.internal.upgrade.v1_4_1.LayoutClassedModelUsageUpgradeProcess.lambda$doUpgrade$2(LayoutClassedModelUsageUpgradeProcess.java:128) ~[?:?]     at com.liferay.portal.kernel.dao.db.BaseDBProcess.lambda$_processConcurrently$5(BaseDBProcess.java:595) ~[portal-kernel.jar:?]     at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1448) ~[?:?]     at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) ~[?:?]     at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) ~[?:?]     at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) ~[?:?]     at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) ~[?:?]     at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) ~[?:?]

Hi, it's probably best to post support questions to Liferay Ask or the Community Slack.  I personally don't have much experience with PostgreSQL (yet).

Is it just me, but both links to "Fixes" and "List of known issues" give me an error "The value '7.4.3.112 GA112' does not exist for the field 'fixVersion'."  If others can see them, then my user account on JIRA seems to be corrupt, otherwise there may be a problem.