anchor.diff:  
   * link:https://access.redhat.com/products/red-hat-amq#streams[Red Hat AMQ Streams] was used to set up and start running Apache Kafka and Kafka Connect on OpenShift. AMQ Streams offers operators and images that bring Kafka to OpenShift. 
   
  -* Podman or Docker is installed and you have sufficient rights to create and manage containers.
  +* Podman or Docker is installed.
  +
  +* You have an account and permissions to create and manage containers in the container registry (such as `quay.io` or `docker.io`) to which you plan to add the container that will run your Debezium connector. 
   
   .Procedure
   
  -. Add the {prodname} PostgreSQL connector files to Kafka Connect: 
  +. Create the {prodname} PostgreSQL container for Kafka Connect: 
   .. Download the {prodname} link:https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?product=red.hat.integration&downloadType=distributions[PostgreSQL connector archive].
   
   .. Extract the {prodname} PostgreSQL connector archive to create a directory structure for the connector plug-in, for example: 
   +
   [subs="+macros"]
   ----
  -pass:quotes[*tree ./my-plugins/*]
   ./my-plugins/
   ├── debezium-connector-postgresql
   │   ├── ...
   ----
   
  -.. Add the plug-in's parent directory to your Kafka Connect `plugin.path`. For example, if you extracted the {prodname} PostgreSQL connector to `/kafka/connect/debezium-connector-postgresql`, execute this command: 
  -+
  -[source]
  -----
  -plugin.path=/kafka/connect
  -----
  -
  -.. Restart your Kafka Connect process so that it picks up the new files in the plug-in's parent directory. 
  -
  -. Create and publish a custom image for running your {prodname} connector:
  -
  -.. Create a new `Dockerfile` by using `{DockerKafkaConnect}` as the base image. In the following example, you would replace _my-plugins_ with the name of your plug-ins directory:
  +.. Create a Docker file that uses `{DockerKafkaConnect}` as the base image. 
  +For example, from a terminal window, enter the following:
   +
   [subs="+macros,+attributes"]
   ----
  -FROM {DockerKafkaConnect}
  -USER root:root
  -pass:quotes[COPY _./my-plugins/_ /opt/kafka/plugins/]
  -USER 1001
  -----
  -+
  -Before Kafka Connect starts running the connector, Kafka Connect loads any third-party plug-ins that are in the `/opt/kafka/plugins` directory.
  -
  -.. Build the container image. For example, if you saved the `Dockerfile` that you created in the previous step as `debezium-container-for-postgresql`, and if the `Dockerfile` is in the current directory, then you would run the following command:
  +pass:quotes[*cat <<EOF >debezium-container-for-postgresql.yaml*] // <1>
  +pass:quotes[*FROM {DockerKafkaConnect}*]
  +pass:quotes[*USER root:root*]
  +pass:quotes[*COPY ./my-plugins/ /opt/kafka/plugins/*] // <2>
  +pass:quotes[*USER 1001*]
  +pass:quotes[*EOF*]
  +----
  +<1> You can specify any file name that you want.
  +<2> Replace `my-plugins` with the name of your plug-ins directory.
  +
  +The command creates a Docker file with the name `debezium-container-for-postgresql.yaml` in the current directory.
  +
  +.. Build the container image from the `debezium-container-for-postgresql.yaml` Docker file that you created in the previous step. From the directory that contains the file, run the following command:
   +
   [source,shell,options="nowrap"]
   ----
   podman build -t debezium-container-for-postgresql:latest .
   ----
  -
  -.. Push your custom image to your container registry, for example:
  ++
  +This command builds a container image with the name `debezium-container-for-postgresql`. 
  +
  +.. Push your custom image to a container registry such as `quay.io` or any internal container registry. Ensure that this registry is reachable from your OpenShift instance. For example:
   +
   [source,shell,options="nowrap"]
   ----
   podman push debezium-container-for-postgresql:latest
   ----
   
  -.. Update your Kafka environment to point to the new container image. Do this by editing your `KafkaConnect` custom resource to set the `spec.image` property to the name of the new container image. If set, this property overrides the `STRIMZI_DEFAULT_KAFKA_CONNECT_IMAGE` variable in the Cluster Operator. For example:
  +.. Create a new {prodname} PostgreSQL `KafkaConnect` custom resource (CR). For example, create a `KafkaConnect` CR with the name `dbz-connect.yaml` that specifies `annotations` and `image` properties as shown in the following example:
   +
   [source,yaml,subs="+attributes"]
   ----
  
positive.code:  +
  _<heartbeat.topics.prefix>_._<server.name>_ +
   +
  For example, if the database server name is `fullfillment`, the default topic name is `__debezium-heartbeat.fulfillment`.
  
  |[[postgresql-property-heartbeat-action-query]]<<postgresql-property-heartbeat-action-query, `heartbeat.action{zwsp}.query`>>
  |
  
negative.code: [[postgresql-data-types]]
  == Data type mappings
  
  The PostgreSQL connector represents changes to rows with events that are structured like the table in which the row exists. The event contains a field for each column value. How that value is represented in the event depends on the PostgreSQL data type of the column. The following sections describe how the connector maps PostgreSQL data types to a _literal type_ and a _semantic type_ in event fields.
  
  * _literal type_ describes how the value is literally represented using Kafka Connect schema types: `INT8`, `INT16`, `INT32`, `INT64`, `FLOAT32`, `FLOAT64`, `BOOLEAN`, `STRING`, `BYTES`, `ARRAY`, `MAP`, and `STRUCT`.
  
  * _semantic type_ describes how the Kafka Connect schema captures the _meaning_ of the field using the name of the Kafka Connect schema for the field.
  
  ifdef::product[]
  Details are in the following sections: 
  