{"id":42820,"date":"2026-02-13T10:37:42","date_gmt":"2026-02-13T09:37:42","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=42820"},"modified":"2026-02-13T10:37:42","modified_gmt":"2026-02-13T09:37:42","slug":"commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/","title":{"rendered":"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In the <a href=\"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-1-setup\/\" target=\"_blank\" rel=\"noreferrer noopener\">last post<\/a> we&#8217;ve looked at how you you get EDB Postgres Extended server installed on your system. In contrast to the version provided by Fujitsu, TDE needs to be enabled when you initialize a new cluster, so lets do this and see how we can proceed from there on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When we&#8217;ve initialized a new cluster in the last post, we got this output from initdb:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nData page checksums are enabled.\nTransparent data encryption is disabled.\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Somehow we need to enable this and the EDB&#8217;s version of initdb comes with this options when dealing with TDE:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ \/usr\/edb\/pge18\/bin\/initdb --help | egrep -A 2 &quot;encryption|key&quot;\n  -y, --data-encryption&#x5B;=KEYLEN]\n                            enable transparent data encryption\n      --copy-key-from=FILE  copy key from given location (useful for upgrades)\n      --key-wrap-command=CMD\n                            shell command to wrap (encrypt) data encryption key\n      --key-unwrap-command=CMD\n                            shell command to unwrap (decrypt) data encryption key\n      --no-key-wrap         do not wrap the generated data encryption key (insecure!)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">&#8220;-y, &#8211;data-encryption&#8221; is apparently about enabling encryption in general and then there are a couple of options around a key. This key is very much like how <a href=\"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-1-fujitsu-enterprise-postgres-2-tde\/\" target=\"_blank\" rel=\"noreferrer noopener\">Fujitsu is doing it with the keystore<\/a>. For production deployments you should retrieve the key from an external keystore and you need to provide the &#8220;&#8211;key-wrap-command&#8221; and &#8220;&#8211;key-unwrap-command&#8221; switches for this. There is also the &#8220;&#8211;no-key-wrap&#8221; but this leaves your key unprotected and should not be used at all. For the scope of this post we&#8217;ll <a href=\"https:\/\/www.enterprisedb.com\/docs\/tde\/latest\/secure_key\/passphrase\/\" target=\"_blank\" rel=\"noreferrer noopener\">protect the key with a passphrase<\/a>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [2,4]; title: ; notranslate\" title=\"\">\n# cleanup from previous post\n&#x5B;postgres@postgres-tde ~]$ rm -rf \/u02\/pgdata\/pge18\/\n# initialize a new cluster with TDE enabled\n&#x5B;postgres@postgres-tde ~]$ sudo PGSETUP_INITDB_OPTIONS=&quot;--encoding UTF-8 --pgdata=\/u02\/pgdata\/pge18 -y --key-wrap-command=&#039;openssl enc -e -aes-128-cbc -pbkdf2 -out \\&quot;%p\\&quot;&#039; --key-unwrap-command=&#039;openssl enc -d -aes-128-cbc -pbkdf2 -in \\&quot;%p\\&quot;&#039;&quot; \/usr\/edb\/pge18\/bin\/edb-pge-18-setup initdb\nInitializing database ... \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This does not give much output and actually nothing was done. Lets use initdb directly without using the &#8220;db-pge-18-setup&#8221; wrapper:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ \/usr\/edb\/pge18\/bin\/initdb --encoding UTF-8 --pgdata=\/u02\/pgdata\/pge18 -y --key-wrap-command=&#039;openssl enc -e -aes-128-cbc -pbkdf2 -out &quot;%p&quot;&#039; --key-unwrap-command=&#039;openssl enc -d -aes-128-cbc -pbkdf2 -in &quot;%p&quot;&#039;\nThe files belonging to this database system will be owned by user &quot;postgres&quot;.\nThis user must also own the server process.\n\nThe database cluster will be initialized with locale &quot;en_US.UTF-8&quot;.\nThe default text search configuration will be set to &quot;english&quot;.\n\nData page checksums are enabled.\nTransparent data encryption is enabled (128 bits).\n\ncreating directory \/u02\/pgdata\/pge18 ... ok\ncreating subdirectories ... ok\nselecting dynamic shared memory implementation ... posix\nselecting default &quot;max_connections&quot; ... 100\nselecting default &quot;shared_buffers&quot; ... 128MB\nselecting default time zone ... Europe\/Berlin\ncreating configuration files ... ok\nsetting up data encryption ... enter AES-128-CBC encryption password:\nVerifying - enter AES-128-CBC encryption password:\nok\nrunning bootstrap script ... enter AES-128-CBC decryption password:\nok\nperforming post-bootstrap initialization ... enter AES-128-CBC decryption password:\nok\nsyncing data to disk ... ok\n\ninitdb: warning: enabling &quot;trust&quot; authentication for local connections\ninitdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.\n\nSuccess. You can now start the database server using:\n\n    \/usr\/edb\/pge18\/bin\/pg_ctl -D \/u02\/pgdata\/pge18 -l logfile start\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This will ask for the encryption password to be used and generates\/populates PGDATA:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ ls -la \/u02\/pgdata\/pge18\/\ntotal 60\ndrwx------. 20 postgres postgres  4096 Feb  9 07:52 .\ndrwxr-xr-x.  3 postgres postgres    19 Feb  9 07:52 ..\ndrwx------.  5 postgres postgres    33 Feb  9 07:52 base\ndrwx------.  2 postgres postgres  4096 Feb  9 07:52 global\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_commit_ts\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_dynshmem\ndrwx------.  2 postgres postgres    21 Feb  9 07:52 pg_encryption\n-rw-------.  1 postgres postgres  5721 Feb  9 07:52 pg_hba.conf\n-rw-------.  1 postgres postgres  2681 Feb  9 07:52 pg_ident.conf\ndrwx------.  4 postgres postgres    68 Feb  9 07:52 pg_logical\ndrwx------.  4 postgres postgres    36 Feb  9 07:52 pg_multixact\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_notify\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_replslot\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_serial\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_snapshots\ndrwx------.  2 postgres postgres    25 Feb  9 07:52 pg_stat\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_stat_tmp\ndrwx------.  2 postgres postgres    18 Feb  9 07:52 pg_subtrans\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_tblspc\ndrwx------.  2 postgres postgres     6 Feb  9 07:52 pg_twophase\n-rw-------.  1 postgres postgres     3 Feb  9 07:52 PG_VERSION\ndrwx------.  4 postgres postgres    77 Feb  9 07:52 pg_wal\ndrwx------.  2 postgres postgres    18 Feb  9 07:52 pg_xact\n-rw-------.  1 postgres postgres    88 Feb  9 07:52 postgresql.auto.conf\n-rw-------.  1 postgres postgres 32732 Feb  9 07:52 postgresql.conf\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">What this did in addition is to add the unwrap command to postgresql.conf:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ grep wrap &quot;\/u02\/pgdata\/pge18\/postgresql.conf&quot;\ndata_encryption_key_unwrap_command = &#039;openssl enc -d -aes-128-cbc -pbkdf2 -in &quot;%p&quot;&#039;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Time to start up. When we did the installation in the last post the rpm created a systemd service definition:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ systemctl list-unit-files | grep edb\nedb-pge-18.service                               disabled        disabled\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Of course this service points to the wrong PGDATA so we need to adjust this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ grep PGDATA\\= \/usr\/lib\/systemd\/system\/edb-pge-18.service \nEnvironment=PGDATA=\/var\/lib\/edb-pge\/18\/data\/\n&#x5B;postgres@postgres-tde ~]$ sudo systemctl edit edb-pge-18.service\n### Editing \/etc\/systemd\/system\/edb-pge-18.service.d\/override.conf\n### Anything between here and the comment below will become the new contents of the file\n&#x5B;service]\nEnvironment=PGDATA=\/u02\/pgdata\/pge18\/\n...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Trying to start PostgreSQL afterwards fails, because the decryption password cannot be retrieved:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,4]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ sudo systemctl start edb-pge-18.service \nJob for edb-pge-18.service failed because the control process exited with error code.\nSee &quot;systemctl status edb-pge-18.service&quot; and &quot;journalctl -xeu edb-pge-18.service&quot; for details.\n&#x5B;postgres@postgres-tde ~]$ sudo journalctl -u edb-pge-18.service\nFeb 09 08:05:45 postgres-tde systemd&#x5B;1]: Starting Postgres Extended 18 database server...\nFeb 09 08:05:45 postgres-tde postgres&#x5B;5303]: enter AES-128-CBC decryption password:\nFeb 09 08:05:45 postgres-tde postgres&#x5B;5303]: bad password read\nFeb 09 08:05:45 postgres-tde postgres&#x5B;5303]: 4027EF83CA7F0000:error:1400006B:UI routines:UI_process:processing error:crypto\/ui\/ui_lib.c:552:while reading strings\nFeb 09 08:05:45 postgres-tde postgres&#x5B;5302]: 2026-02-09 08:05:45.875 CET &#x5B;5302] FATAL:  could not run command &quot;openssl enc -d -aes-128-cbc -pbkdf2 -in &quot;pg_encryption\/key.bin&quot;&quot;: child process exited with exit code 1\nFeb 09 08:05:45 postgres-tde postgres&#x5B;5302]: 2026-02-09 08:05:45.875 CET &#x5B;5302] LOG:  database system is shut down\nFeb 09 08:05:45 postgres-tde systemd&#x5B;1]: edb-pge-18.service: Main process exited, code=exited, status=1\/FAILURE\nFeb 09 08:05:45 postgres-tde systemd&#x5B;1]: edb-pge-18.service: Failed with result &#039;exit-code&#039;.\nFeb 09 08:05:45 postgres-tde systemd&#x5B;1]: Failed to start Postgres Extended 18 database server.\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">There are two options to resolve this: Either provide the password by passing the reference to a file containing it (not recommended, of course) or you need to use <a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/latest\/systemd-ask-password.html?__goaway_challenge=meta-refresh&amp;__goaway_id=c01f4654529058993a88bb78119baddf\">systemd-ask-password<\/a> and tweak the systemd service definition once more. We&#8217;ll be going the easy (and not recommended) way and will provide the password using a file and re-initialize the cluster:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2,33]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ echo &quot;admin123&quot; &gt; \/home\/postgres\/pass.bin\n&#x5B;postgres@postgres-tde ~]$ \/usr\/edb\/pge18\/bin\/initdb --data-encryption --key-wrap-command=&#039;openssl enc -e -aes-128-cbc -pbkdf2 -pass file:\/home\/postgres\/pass.bin -out &quot;%p&quot;&#039; --key-unwrap-command=&#039;openssl enc -d -aes-128-cbc -pbkdf2 -pass file:\/home\/postgres\/pass.bin -in &quot;%p&quot;&#039; --pgdata=\/u02\/pgdata\/pge18\/\nThe files belonging to this database system will be owned by user &quot;postgres&quot;.\nThis user must also own the server process.\n\nThe database cluster will be initialized with locale &quot;en_US.UTF-8&quot;.\nThe default database encoding has accordingly been set to &quot;UTF8&quot;.\nThe default text search configuration will be set to &quot;english&quot;.\n\nData page checksums are enabled.\nTransparent data encryption is enabled (128 bits).\n\nfixing permissions on existing directory \/u02\/pgdata\/pge18 ... ok\ncreating subdirectories ... ok\nselecting dynamic shared memory implementation ... posix\nselecting default &quot;max_connections&quot; ... 100\nselecting default &quot;shared_buffers&quot; ... 128MB\nselecting default time zone ... Europe\/Berlin\ncreating configuration files ... ok\nsetting up data encryption ... ok\nrunning bootstrap script ... ok\nperforming post-bootstrap initialization ... ok\nsyncing data to disk ... ok\n\ninitdb: warning: enabling &quot;trust&quot; authentication for local connections\ninitdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.\n\nSuccess. You can now start the database server using:\n\n    \/usr\/edb\/pge18\/bin\/pg_ctl -D \/u02\/pgdata\/pge18\/ -l logfile start\n\n&#x5B;postgres@postgres-tde ~]$ grep -i wrap \/u02\/pgdata\/pge18\/*.conf\n\/u02\/pgdata\/pge18\/postgresql.conf:data_encryption_key_unwrap_command = &#039;openssl enc -d -aes-128-cbc -pbkdf2 -pass file:\/home\/postgres\/pass.bin -in &quot;%p&quot;&#039;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Time to start the instance:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ sudo systemctl start edb-pge-18.service\n&#x5B;postgres@postgres-tde ~]$ sudo systemctl status edb-pge-18.service\n\u25cf edb-pge-18.service - Postgres Extended 18 database server\n     Loaded: loaded (\/usr\/lib\/systemd\/system\/edb-pge-18.service; enabled; preset: disabled)\n    Drop-In: \/etc\/systemd\/system\/edb-pge-18.service.d\n             \u2514\u2500override.conf\n     Active: active (running) since Fri 2026-02-13 08:25:39 CET; 4s ago\n       Docs: https:\/\/www.postgresql.org\/docs\/18\/static\/\n    Process: 1691 ExecStartPre=\/usr\/edb\/pge18\/bin\/edb-pge-18-check-db-dir ${PGDATA} (code=exited, status=0\/SUCCESS)\n   Main PID: 1696 (postgres)\n      Tasks: 9 (limit: 7834)\n     Memory: 21.7M (peak: 22.0M)\n        CPU: 42ms\n     CGroup: \/system.slice\/edb-pge-18.service\n             \u251c\u25001696 \/usr\/edb\/pge18\/bin\/postgres -D \/u02\/pgdata\/pge18\/\n             \u251c\u25001698 &quot;postgres: io worker 0&quot;\n             \u251c\u25001699 &quot;postgres: io worker 2&quot;\n             \u251c\u25001700 &quot;postgres: io worker 1&quot;\n             \u251c\u25001701 &quot;postgres: checkpointer &quot;\n             \u251c\u25001702 &quot;postgres: background writer &quot;\n             \u251c\u25001704 &quot;postgres: walwriter &quot;\n             \u251c\u25001705 &quot;postgres: autovacuum launcher &quot;\n             \u2514\u25001706 &quot;postgres: logical replication launcher &quot;\n\nFeb 13 08:25:39 postgres-tde systemd&#x5B;1]: Starting Postgres Extended 18 database server...\nFeb 13 08:25:39 postgres-tde postgres&#x5B;1696]: 2026-02-13 08:25:39.774 CET &#x5B;1696] LOG:  starting PostgreSQL 18.1 (EDB Postgres Extended Server 18.1.0) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-5), 64-b&gt;\nFeb 13 08:25:39 postgres-tde postgres&#x5B;1696]: 2026-02-13 08:25:39.775 CET &#x5B;1696] LOG:  listening on IPv6 address &quot;::1&quot;, port 5432\nFeb 13 08:25:39 postgres-tde postgres&#x5B;1696]: 2026-02-13 08:25:39.775 CET &#x5B;1696] LOG:  listening on IPv4 address &quot;127.0.0.1&quot;, port 5432\nFeb 13 08:25:39 postgres-tde postgres&#x5B;1696]: 2026-02-13 08:25:39.778 CET &#x5B;1696] LOG:  listening on Unix socket &quot;\/var\/run\/edb-pge\/.s.PGSQL.5432&quot;\nFeb 13 08:25:39 postgres-tde postgres&#x5B;1696]: 2026-02-13 08:25:39.781 CET &#x5B;1696] LOG:  listening on Unix socket &quot;\/tmp\/.s.PGSQL.5432&quot;\nFeb 13 08:25:39 postgres-tde postgres&#x5B;1703]: 2026-02-13 08:25:39.785 CET &#x5B;1703] LOG:  database system was shut down at 2026-02-13 08:24:53 CET\nFeb 13 08:25:39 postgres-tde postgres&#x5B;1696]: 2026-02-13 08:25:39.789 CET &#x5B;1696] LOG:  database system is ready to accept connections\nFeb 13 08:25:39 postgres-tde systemd&#x5B;1]: Started Postgres Extended 18 database server.\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">As with Fujitsu, be aware that dumping data with pg_dump (or pg_dumpall) will result in unencrypted data:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,5,7,9,10,11]; title: ; notranslate\" title=\"\">\n&#x5B;postgres@postgres-tde ~]$ psql\npsql (18.1 (EDB Postgres Extended Server 18.1.0))\nType &quot;help&quot; for help.\n\npostgres=# create table t ( a int, b text );\nCREATE TABLE\npostgres=# insert into t select i, i::text from generate_series(1,100) i;\nINSERT 0 100\npostgres=# \\q\n&#x5B;postgres@postgres-tde ~]$ pg_dump &gt; a.sql\n&#x5B;postgres@postgres-tde ~]$ cat a.sql \n--\n-- PostgreSQL database dump\n--\n...\nCOPY public.t (a, b) FROM stdin;\n1       1\n2       2\n3       3\n4       4\n...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The tools which require the unwrap command are documented <a href=\"https:\/\/www.enterprisedb.com\/docs\/tde\/latest\/affected_commands\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a> (initdb, pg_rewind, &#8230;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To check if a cluster has TDE enabled (or was initialized with TDE) you can use the pg_control_init function, which also was modified for TDE purposes:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# select data_encryption_version, data_encryption_keylen  from pg_control_init();\n data_encryption_version | data_encryption_keylen \n-------------------------+------------------------\n                       1 |                    128\n(1 row)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Some final thoughts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In contracts to Fujitsu&#8217;s implementation the EDB implementation is not based on tablespaces but the complete cluster.<\/li>\n\n\n\n<li>You need to provide the key when the instance is started, otherwise startup will fail. This is not the case with Fujitsu.<\/li>\n\n\n\n<li>Because encryption is applied instance wide several commands (e.g. pg_rewind) need to be aware of the unwrap command.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In the last post we&#8217;ve looked at how you you get EDB Postgres Extended server installed on your system. In contrast to the version provided by Fujitsu, TDE needs to be enabled when you initialize a new cluster, so lets do this and see how we can proceed from there on. When we&#8217;ve initialized a&hellip;&nbsp;<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[4133],"tags":[],"class_list":["post-42820","post","type-post","status-publish","format-standard","hentry","category-database"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.8 (Yoast SEO v28.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE - dbi services | Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE\" \/>\n<meta property=\"og:description\" content=\"In the last post we&#8217;ve looked at how you you get EDB Postgres Extended server installed on your system. In contrast to the version provided by Fujitsu, TDE needs to be enabled when you initialize a new cluster, so lets do this and see how we can proceed from there on. When we&#8217;ve initialized a&hellip;&nbsp;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi services | Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dbiservices\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-13T09:37:42+00:00\" \/>\n<meta name=\"author\" content=\"Open source Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:site\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Open source Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/\"},\"author\":{\"name\":\"Open source Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\"},\"headline\":\"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE\",\"datePublished\":\"2026-02-13T09:37:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/\"},\"wordCount\":475,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"articleSection\":[\"Database\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/\",\"name\":\"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE - dbi services | Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-02-13T09:37:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi services Blog\",\"description\":\"#BeSharing\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"alternateName\":\"dbi Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\",\"name\":\"dbi services\",\"alternateName\":\"dbi\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"width\":512,\"height\":512,\"caption\":\"dbi services\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/dbiservices\\\/\",\"https:\\\/\\\/x.com\\\/dbiservices\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dbi-services\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/dbiservices\"],\"description\":\"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.\",\"email\":\"info@dbi-services.com\",\"telephone\":\"+41 32 422 96 00\",\"legalName\":\"dbi services SA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\",\"name\":\"Open source Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"caption\":\"Open source Team\"},\"description\":\"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/open-source-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE - dbi services | Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/","og_locale":"en_US","og_type":"article","og_title":"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE","og_description":"In the last post we&#8217;ve looked at how you you get EDB Postgres Extended server installed on your system. In contrast to the version provided by Fujitsu, TDE needs to be enabled when you initialize a new cluster, so lets do this and see how we can proceed from there on. When we&#8217;ve initialized a&hellip;&nbsp;","og_url":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/","og_site_name":"dbi services | Blog","article_publisher":"https:\/\/www.facebook.com\/dbiservices\/","article_published_time":"2026-02-13T09:37:42+00:00","author":"Open source Team","twitter_card":"summary_large_image","twitter_creator":"@dbiservices","twitter_site":"@dbiservices","twitter_misc":{"Written by":"Open source Team","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/"},"author":{"name":"Open source Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a"},"headline":"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE","datePublished":"2026-02-13T09:37:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/"},"wordCount":475,"commentCount":0,"publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"articleSection":["Database"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/","url":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/","name":"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE - dbi services | Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2026-02-13T09:37:42+00:00","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/commercial-postgresql-distributions-with-tde-2-edb-postgres-extended-server-2-tde\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Commercial PostgreSQL distributions with TDE (2) EDB Postgres Extended Server (2) TDE"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi services Blog","description":"#BeSharing","publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"alternateName":"dbi Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dbi-services.com\/blog\/#organization","name":"dbi services","alternateName":"dbi","url":"https:\/\/www.dbi-services.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","width":512,"height":512,"caption":"dbi services"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/dbiservices\/","https:\/\/x.com\/dbiservices","https:\/\/www.linkedin.com\/company\/dbi-services\/","https:\/\/www.youtube.com\/user\/dbiservices"],"description":"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.","email":"info@dbi-services.com","telephone":"+41 32 422 96 00","legalName":"dbi services SA"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a","name":"Open source Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","caption":"Open source Team"},"description":"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.","url":"https:\/\/www.dbi-services.com\/blog\/author\/open-source-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/42820","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=42820"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/42820\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=42820"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=42820"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=42820"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}