{"id":437,"date":"2024-10-23T06:26:06","date_gmt":"2024-10-23T06:26:06","guid":{"rendered":"https:\/\/ptdb.ch\/?p=437"},"modified":"2025-12-10T09:50:21","modified_gmt":"2025-12-10T09:50:21","slug":"postgresql-how-to-upgrade-temboard-from-8-2-1-to-9-0-0-on-red-hat-9-x","status":"publish","type":"post","link":"https:\/\/ptdb.ch\/?p=437","title":{"rendered":"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x"},"content":{"rendered":"<p>Dalibo released on the 18th of October temBoard version 9.0.0. The new release comes with a lot of new features.<\/p>\n<p><strong>The breaking changes are:<\/strong><\/p>\n<ul>\n<li>Replace instance groups and user groups by Environment. An instance must be in one and single environment<\/li>\n<li>temBoard agent v8 can\u2019t register to temBoard UI v9<\/li>\n<li>Use temboard register to register a new temBoard v8 agent on a temBoard v9 UI. Or upgrade agent to v9. temBoard UI v9 can still manage agent v8<\/li>\n<li>Drop support for 7.x agents<\/li>\n<li>Drop python 2.7 support<\/li>\n<li>Drop rhel7 and buster support, minimum versions are now 6.0.2 for tornado and 1.3.2 for sqlalchemy<\/li>\n<li>Drop plugin hotplug. Just restart temBoard UI or agent<\/li>\n<li>Drop daemonization. Use nohup or systemd<\/li>\n<\/ul>\n<p><strong>Other changes:<\/strong><\/p>\n<ul>\n<li>Postgres 17 support<\/li>\n<li>Visualize Plan with PEV2<\/li>\n<li>Packages for Ubuntu 24.04 Noble<\/li>\n<li>Fix deletion of host metrics when removing an instance of multi-instances host<\/li>\n<li>agent: Recover admin shutdown, backend terminated, etc<\/li>\n<li>Fix error handling in agent plugins<\/li>\n<li>A lot of modernization : moved to Vue3, Bootstrap 5, Flask and ruff<\/li>\n<li>A lot of UI tweaks &amp; fixes<\/li>\n<li>Accept editing instance even when agent is down<\/li>\n<li>Improved postgresql.conf handling and error management<\/li>\n<li>temboard query-agent command now accepts &#8211;delete and &#8211;post to set HTTP verb<\/li>\n<li>Improve home dashboard performance<\/li>\n<\/ul>\n<p>For more information take a look at the following link<\/p>\n<p><a href=\"https:\/\/temboard.readthedocs.io\/en\/latest\/changelog\/\">https:\/\/temboard.readthedocs.io\/en\/latest\/changelog\/<\/a><\/p>\n<p>You can compare changes between release 8.2.1 and 9.0 and see how many changes went into this release<\/p>\n<p><a href=\"https:\/\/github.com\/dalibo\/temboard\/compare\/v8.2.1...v9.0.0\">https:\/\/github.com\/dalibo\/temboard\/compare\/v8.2.1&#8230;v9.0.0<\/a><\/p>\n<p>However, in this blog post I would like to concentrate on the upgrade procedure to the version 9.0.<\/p>\n<p>Before you start, read the upgrade docs carefully. You can find them here.<\/p>\n<p><a href=\"https:\/\/temboard.readthedocs.io\/en\/latest\/server_upgrade\/\">https:\/\/temboard.readthedocs.io\/en\/latest\/server_upgrade\/<\/a><\/p>\n<p>From a high level view, the most important steps are:<\/p>\n<ul>\n<li>Download the rpm files for your Linux release (RHEL 9.x in my case)\n<ul>\n<li><a href=\"https:\/\/github.com\/dalibo\/temboard\">https:\/\/github.com\/dalibo\/temboard<\/a><\/li>\n<\/ul>\n<\/li>\n<li>Backup your repository database<\/li>\n<li>Backup temboard.conf, temboard-agent.conf and other temboard related files<\/li>\n<li>Upgrade first the agents to at least 8.2.1 if not already done<\/li>\n<li>Upgrade temboard and the agent to 9.0<\/li>\n<\/ul>\n<p>In this blog post, I will jump right into the temBoard upgrade process.<\/p>\n<p>Check the installed version first. In case you got the development version installed, you can&#8217;t upgrade the package directly. You need to remove it first with the &#8220;rpm &#8211;noscripts&#8221; command. A development version, is the one with the &lt;dev0&gt; in the package name.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ rpm -qa | grep temboard\r\ntemboard-8.2.1.dev0-1.el9.noarch\r\ntemboard-agent-8.2.1-1.el9.noarch\r\n<\/pre>\n<p>Stop the temBoard server and agent and start with a clean log file. An empty log file is very useful in case you need to debug the installation process.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ sudo systemctl stop temboard-agent@PGMP01A.service\r\n$ sudo systemctl stop temboard.service\r\n$ sudo systemctl reset-failed\r\n$ sudo systemctl is-system-running\r\nrunning\r\n$ cd \/var\/log\/temboard\/\r\n$ sudo mv temboard.log temboard.log.before_upgrade_to_9.0\r\n$ cd \/etc\/temboard\/; cp -p temboard.conf temboard.conf.20241021a\r\n<\/pre>\n<p>To delete the old temboard 8.2.1 dev package, use the following rpm command<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ rpm -qa | grep temboard\r\ntemboard-8.2.1.dev0-1.el9.noarch\r\n\r\n$ sudo rpm --noscripts --erase temboard-8.2.1.dev0-1.el9.noarch\r\n\r\n$ rpm -qa | grep temboard\r\ntemboard-agent-8.2.1-1.el9.noarch\r\n<\/pre>\n<p>After the dev package is uninstall successfully, you can use the dnf command to install the new package.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ sudo dnf localinstall temboard-9.0.0-1.el9.noarch.rpm\r\nUpdating Subscription Management repositories.\r\nRed Hat Satellite Client 6 for RHEL 9 x86_64 (RPMs)                                                                                                                    27 kB\/s | 2.3 kB     00:00\r\nRed Hat CodeReady Linux Builder for RHEL 9 x86_64 (RPMs)                                                                                                               36 kB\/s | 2.9 kB     00:00\r\nRed Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)                                                                                                               33 kB\/s | 2.9 kB     00:00\r\nRed Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs)                                                                                                                  30 kB\/s | 2.6 kB     00:00\r\nRed Hat Enterprise Linux 9 for x86_64 - Supplementary (RPMs)                                                                                                           22 kB\/s | 2.0 kB     00:00\r\nDependencies resolved.\r\n======================================================================================================================================================================================================\r\n Package                                       Architecture                                Version                                            Repository                                         Size\r\n======================================================================================================================================================================================================\r\nInstalling:\r\n temboard                                      noarch                                      9.0.0-1.el9                                        @commandline                                      1.3 M\r\n\r\nTransaction Summary\r\n======================================================================================================================================================================================================\r\nInstall  1 Package\r\n\r\nTotal size: 1.3 M\r\nInstalled size: 4.1 M\r\nIs this ok &#x5B;y\/N]: y\r\nDownloading Packages:\r\nRunning transaction check\r\nTransaction check succeeded.\r\nRunning transaction test\r\nTransaction test succeeded.\r\nRunning transaction\r\n  Preparing        :                                                                                                                                                                              1\/1\r\n  Installing       : temboard-9.0.0-1.el9.noarch                                                                                                                                                  1\/1\r\n  Running scriptlet: temboard-9.0.0-1.el9.noarch                                                                                                                                                  1\/1\r\n  Verifying        : temboard-9.0.0-1.el9.noarch                                                                                                                                                  1\/1\r\nInstalled products updated.\r\nLast metadata expiration check: 0:00:01 ago on Mon 21 Oct 2024 08:50:38 AM CEST.\r\n\r\nInstalled:\r\n  temboard-9.0.0-1.el9.noarch\r\n\r\nComplete!\r\n<\/pre>\n<p>Now it is time to upgrade the temBoard agent.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ sudo dnf localupdate temboard-agent-9.0.0-1.el9.noarch.rpm\r\nUpdating Subscription Management repositories.\r\nRed Hat Satellite Client 6 for RHEL 9 x86_64 (RPMs)                                                                                                                    39 kB\/s | 2.3 kB     00:00\r\nRed Hat CodeReady Linux Builder for RHEL 9 x86_64 (RPMs)                                                                                                               53 kB\/s | 2.9 kB     00:00\r\nRed Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)                                                                                                               49 kB\/s | 2.9 kB     00:00\r\nRed Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs)                                                                                                                  43 kB\/s | 2.6 kB     00:00\r\nRed Hat Enterprise Linux 9 for x86_64 - Supplementary (RPMs)                                                                                                           34 kB\/s | 2.0 kB     00:00\r\nDependencies resolved.\r\n======================================================================================================================================================================================================\r\n Package                                            Architecture                               Version                                         Repository                                        Size\r\n======================================================================================================================================================================================================\r\nUpgrading:\r\n temboard-agent                                     noarch                                     9.0.0-1.el9                                     @commandline                                     207 k\r\n\r\nTransaction Summary\r\n======================================================================================================================================================================================================\r\nUpgrade  1 Package\r\n\r\nTotal size: 207 k\r\nIs this ok &#x5B;y\/N]: y\r\nDownloading Packages:\r\nRunning transaction check\r\nTransaction check succeeded.\r\nRunning transaction test\r\nTransaction test succeeded.\r\nRunning transaction\r\n  Preparing        :                                                                                                                                                                              1\/1\r\n  Running scriptlet: temboard-agent-9.0.0-1.el9.noarch                                                                                                                                            1\/2\r\n  Upgrading        : temboard-agent-9.0.0-1.el9.noarch                                                                                                                                            1\/2\r\n  Running scriptlet: temboard-agent-9.0.0-1.el9.noarch                                                                                                                                            1\/2\r\n  Running scriptlet: temboard-agent-8.2.1-1.el9.noarch                                                                                                                                            2\/2\r\n  Cleanup          : temboard-agent-8.2.1-1.el9.noarch                                                                                                                                            2\/2\r\n  Running scriptlet: temboard-agent-8.2.1-1.el9.noarch                                                                                                                                            2\/2\r\n  Verifying        : temboard-agent-9.0.0-1.el9.noarch                                                                                                                                            1\/2\r\n  Verifying        : temboard-agent-8.2.1-1.el9.noarch                                                                                                                                            2\/2\r\nInstalled products updated.\r\n\r\nUpgraded:\r\n  temboard-agent-9.0.0-1.el9.noarch\r\n\r\nComplete!\r\n<\/pre>\n<p>A quite important step starts now. The upgrade of the repository database itself. This step has to be executed as the temboard OS user.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ su - temboard\r\nPassword:\r\nLast login: Mon Oct 21 03:13:16 CEST 2024 from 10.86.48.22 on pts\/3\r\ntemboard@host01:\/var\/lib\/temboard\r\n$\r\n<\/pre>\n<p>In case you are interested in the full command line options which are available, just use the &#8211;help option.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ \/usr\/bin\/temboard --help\r\nINFO:  app: Starting temboard 9.0.0.\r\nusage: temboard &#x5B;-h] &#x5B;-c CONFIGFILE] &#x5B;--verbose] &#x5B;-V] COMMAND ...\r\n\r\ntemBoard UI 9.0.0.\r\n\r\nCOMMAND is optional. Default command is `serve`, the combined\r\nservice. See available commands below.\r\n\r\noptional arguments:\r\n  -h, --help            show this help message and exit\r\n  -c CONFIGFILE, --config CONFIGFILE\r\n                        Configuration file\r\n  --verbose, --debug    Enable verbose messages for temBoard.\r\n  -V, --version         show version and exit\r\n\r\nAvailable commands:\r\n  COMMAND               Name of one sub-command described bellow.\r\n    apikey              Manage API keys.\r\n    generate-key        Generate signing key.\r\n    migratedb           Manage temBoard own database.\r\n    query-agent         Query a temBoard agent\r\n    register-instance   Out-of-bound registration of a PostgreSQL instance.\r\n    routes              List HTTP routes map.\r\n    serve               Combined web server and background workers.\r\n    tasks               Manage background tasks.\r\n    web                 Standalone web server.\r\n<\/pre>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ temboard migratedb upgrade\r\nINFO:  app: Starting temboard 9.0.0.\r\nINFO:  app: Using config file \/etc\/temboard\/temboard.conf.\r\n<\/pre>\n<p>\u2026 entries from the postgresql log file<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n2024-10-21 08:55:32.892 CEST &#x5B;3443528] LOG:  statement: BEGIN;\r\n\r\n        ALTER TABLE application.instances DROP COLUMN IF EXISTS agent_key;\r\n\r\n        COMMIT;\r\n\r\n\r\n2024-10-21 08:55:32.904 CEST &#x5B;3443528] LOG:  statement: ------------------------------------------------\r\n        -- Migrating instance groups to environments. --\r\n        ------------------------------------------------\r\n\r\n        CREATE TABLE application.environments (\r\n                id SERIAL PRIMARY KEY,\r\n                name TEXT UNIQUE NOT NULL,\r\n                description TEXT,\r\n                color TEXT,\r\n                cdate TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()\r\n        );\r\n\r\n        -- Migrate instance groups to environments.\r\n        INSERT INTO application.environments (name, description)\r\n        -- Create an environment per group combination.\r\n        -- An instance in two groups will create a single environment combining both.\r\n        SELECT DISTINCT\r\n                string_agg(DISTINCT ixg.group_name, &#039;-&#039; ORDER BY ixg.group_name) AS name,\r\n                string_agg(DISTINCT g.group_description, &#039; \/ &#039;) AS description\r\n          FROM application.instances AS i\r\n          JOIN application.instance_groups AS ixg\r\n            ON i.agent_address = ixg.agent_address\r\n           AND i.agent_port = ixg.agent_port\r\n           AND ixg.group_kind = &#039;instance&#039;\r\n          JOIN application.groups AS g\r\n            ON ixg.group_kind = g.group_kind\r\n           AND ixg.group_name = g.group_name\r\n         GROUP BY i.agent_address, i.agent_port\r\n\r\n         UNION\r\n\r\n        -- Create an environment per empty group.\r\n        SELECT DISTINCT g.group_name AS name, g.group_description AS description\r\n          FROM application.groups AS g\r\n          LEFT OUTER JOIN application.instance_groups\r\n            ON instance_groups.group_kind = g.group_kind\r\n           AND instance_groups.group_name = g.group_name\r\n         WHERE g.group_kind = &#039;instance&#039;\r\n           AND instance_groups.agent_address IS NULL\r\n\r\n         UNION\r\n\r\n        SELECT DISTINCT\r\n                &#039;temboard-noenv-fallback&#039; AS name,\r\n                &#039;Fallback environment for instances without group&#039; AS description\r\n          FROM application.instances AS i\r\n          LEFT OUTER JOIN application.instance_groups AS ixg\r\n            ON i.agent_address = ixg.agent_address AND i.agent_port = ixg.agent_port\r\n           AND ixg.group_kind = &#039;instance&#039;\r\n         WHERE ixg.agent_address IS NULL\r\n\r\n         ORDER BY 1\r\n        ;\r\n\r\n        -- Associate instance to one single environment.\r\n        ALTER TABLE application.instances\r\n          ADD COLUMN environment_id INTEGER REFERENCES application.environments(id);\r\n\r\n        CREATE VIEW application.vinstances AS\r\n        SELECT\r\n                i.agent_address || &#039;:&#039; || i.agent_port AS agent,\r\n                hostname || &#039;:&#039; || pg_port AS postgres,\r\n                e.name AS environment_name,\r\n                array_agg(p.plugin_name ORDER BY p.plugin_name) FILTER (WHERE p.plugin_name IS NOT NULL) AS plugins\r\n          FROM application.instances AS i\r\n          JOIN application.environments AS e\r\n            ON i.environment_id = e.id\r\n          LEFT OUTER JOIN application.plugins AS p ON p.agent_address = i.agent_address AND p.agent_port = i.agent_port\r\n         GROUP BY 1, 2, 3;\r\n\r\n        -- Attach instance to corresponding environment.\r\n        WITH mapping AS (\r\n                SELECT DISTINCT\r\n                        i.agent_address AS agent_address,\r\n                        i.agent_port AS agent_port,\r\n                        string_agg(DISTINCT ixg.group_name, &#039;-&#039; ORDER BY ixg.group_name) AS environment_name\r\n                  FROM application.instances AS i\r\n                  JOIN application.instance_groups AS ixg\r\n                    ON i.agent_address = ixg.agent_address AND i.agent_port = ixg.agent_port\r\n                   AND ixg.group_kind = &#039;instance&#039;\r\n                  JOIN application.groups AS g\r\n                    ON ixg.group_kind = g.group_kind AND ixg.group_name = g.group_name\r\n                 GROUP BY i.agent_address, i.agent_port\r\n        )\r\n        UPDATE application.instances AS i\r\n           SET environment_id = e.id\r\n          FROM mapping\r\n          JOIN application.environments AS e ON e.name = mapping.environment_name\r\n         WHERE i.agent_address = mapping.agent_address\r\n           AND i.agent_port = mapping.agent_port;\r\n\r\n        UPDATE application.instances\r\n           SET environment_id = (SELECT id FROM application.environments WHERE name = &#039;temboard-noenv-fallback&#039;)\r\n         WHERE environment_id IS NULL;\r\n\r\n        ALTER TABLE application.instances\r\n        ALTER COLUMN environment_id SET NOT NULL;\r\n\r\n        --------------------------------------------\r\n        -- Migrating role groups to environments. --\r\n        --------------------------------------------\r\n\r\n        ALTER TABLE application.groups RENAME TO legacy_groups;\r\n\r\n        -- New groups table without kind, and with an integer primary key.\r\n        CREATE TABLE application.groups (\r\n                id SERIAL PRIMARY KEY,\r\n                name TEXT NOT NULL UNIQUE,\r\n                description TEXT,\r\n                cdate TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()\r\n        );\r\n        ALTER TABLE application.environments\r\n          ADD COLUMN dba_group_id INTEGER REFERENCES application.groups(id) ON DELETE CASCADE;\r\n\r\n        -- Use a secondary table to link group to their role members.\r\n        -- Replaces application.role_groups.\r\n        CREATE TABLE application.memberships (\r\n                id SERIAL PRIMARY KEY,\r\n                role_name TEXT NOT NULL REFERENCES application.roles(role_name) ON DELETE CASCADE,\r\n                group_id INTEGER NOT NULL REFERENCES application.groups(id) ON DELETE CASCADE,\r\n                cdate TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),\r\n                UNIQUE (role_name, group_id)\r\n        );\r\n\r\n        CREATE VIEW application.vroles AS\r\n        SELECT\r\n                r.role_name AS role,\r\n                r.is_active AS active,\r\n                r.is_admin AS admin,\r\n                array_agg(DISTINCT g.name ORDER BY g.name) FILTER (WHERE g.name IS NOT NULL) AS groups\r\n          FROM application.roles AS r\r\n          LEFT OUTER JOIN application.memberships AS m\r\n            ON r.role_name = m.role_name\r\n          LEFT OUTER JOIN application.groups AS g\r\n            ON m.group_id = g.id\r\n         GROUP BY 1, 2, 3\r\n         ORDER BY 1\r\n        ;\r\n\r\n        -- Create a *\/dba group for each environment.\r\n        INSERT INTO application.groups (name, description)\r\n        SELECT DISTINCT\r\n                e.name || &#039;\/dba&#039; AS name,\r\n                -- Profile description in \/settings\/environments\/EEE\/members\r\n                &#039;DBA&#039; AS description\r\n          FROM application.environments AS e\r\n         ORDER BY 1;\r\n\r\n        -- Assign the *\/dba group to the corresponding environment.\r\n        UPDATE application.environments AS e\r\n           SET dba_group_id = g.id\r\n          FROM application.groups AS g\r\n         WHERE g.name = e.name || &#039;\/dba&#039;;\r\n\r\n        ALTER TABLE application.environments\r\n        ALTER COLUMN dba_group_id SET NOT NULL;\r\n\r\n        -- Migrate membership from legacy role_groups.\r\n        WITH legacy AS (\r\n            -- List all role belonging to a DBA groups.\r\n                SELECT DISTINCT\r\n                        rxg.role_name,\r\n                        e.dba_group_id\r\n                -- instance_groups has no entry for empty environments.\r\n                -- We&#039;ll handle this later.\r\n                  FROM application.instances AS i\r\n                  JOIN application.environments AS e ON e.id = i.environment_id\r\n                  JOIN application.instance_groups AS ixg ON ixg.agent_address = i.agent_address AND ixg.agent_port = i.agent_port\r\n                  JOIN application.access_role_instance AS ari\r\n                    ON ari.instance_group_name = ixg.group_name\r\n                   AND ari.instance_group_kind = ixg.group_kind\r\n                  JOIN application.role_groups AS rxg\r\n                    ON rxg.group_name = ari.role_group_name\r\n                   AND rxg.group_kind = ari.role_group_kind\r\n        )\r\n        INSERT INTO application.memberships (role_name, group_id)\r\n        SELECT role_name, dba_group_id FROM legacy\r\n\r\n         UNION\r\n\r\n        -- Create a membership for each empty environments.\r\n        SELECT DISTINCT\r\n                rxg.role_name,\r\n                e.dba_group_id\r\n          FROM application.legacy_groups AS ig\r\n          JOIN application.environments AS e\r\n            ON e.name = ig.group_name\r\n           AND ig.group_kind = &#039;instance&#039;\r\n          JOIN application.access_role_instance AS ari\r\n            ON ari.instance_group_name = ig.group_name\r\n           AND ari.instance_group_kind = ig.group_kind\r\n          JOIN application.role_groups AS rxg\r\n            ON rxg.group_name = ari.role_group_name\r\n           AND rxg.group_kind = ari.role_group_kind\r\n          LEFT OUTER JOIN application.instance_groups AS ixg\r\n                ON ixg.group_name = ig.group_name\r\n           AND ixg.group_kind = ig.group_kind\r\n         WHERE ixg.group_name IS NULL AND ixg.group_kind IS NULL\r\n\r\n         ORDER BY 1, 2\r\n        ;\r\n\r\n        DROP TABLE application.instance_groups;\r\n        DROP TABLE application.access_role_instance;\r\n        DROP TABLE application.role_groups;\r\n        DROP TABLE application.legacy_groups;\r\n<\/pre>\n<p>Now it&#8217;s time to add the Environment with the correct path to the lib directory to the systemd files.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ sudo vi temboard.service\r\n$ cat temboard.service\r\n&#x5B;Unit]\r\nDescription=temBoard Server\r\nAfter=network.target\r\n\r\n&#x5B;Service]\r\nType=simple\r\nUser=temboard\r\nGroup=temboard\r\nEnvironment=&quot;SYSTEMD=1&quot;\r\nEnvironment=&quot;LD_LIBRARY_PATH=\/app\/lib\/postgres\/pgproduct\/pg-14.13\/lib&quot;\r\nExecStart=\/usr\/bin\/temboard -c \/etc\/temboard\/temboard.conf serve\r\nExecReload=\/bin\/kill -HUP $MAINPID\r\n\r\n&#x5B;Install]\r\nWantedBy=multi-user.target\r\n\r\n&#x5B;sourcecode language=&quot;plain&quot;]\r\n$ cd \/etc\/systemd\/system\/multi-user.target.wants\/ \r\n$ sudo vi temboard-agent@PGMP01A.service\r\npostgres@host01:\/etc\/systemd\/system\/multi-user.target.wants\/ &#x5B;PGMP01A] cat temboard-agent@PGMP01A.service\r\n&#x5B;Unit]\r\nDescription=PostgreSQL Remote Control Agent %I\r\nAfter=network.target postgresql@%i.service\r\nAssertPathExists=\/etc\/temboard-agent\/%I\/temboard-agent.conf\r\n\r\n&#x5B;Service]\r\nType=simple\r\nUser=postgres\r\nGroup=postgres\r\nEnvironment=&quot;SYSTEMD=1&quot;\r\nEnvironment=&quot;LD_LIBRARY_PATH=\/app\/lib\/postgres\/pgproduct\/pg-14.13\/lib&quot;\r\nExecStart=\/usr\/bin\/temboard-agent -c \/etc\/temboard-agent\/%I\/temboard-agent.conf serve\r\n# Increase OOM Score to ensure agent is killed before Postgres.\r\nOOMScoreAdjust=15\r\n\r\n&#x5B;Install]\r\nWantedBy=multi-user.target\r\n\r\n\r\n$ sudo systemctl reset-failed\r\n$ sudo systemctl daemon-reload\r\n$\r\n<\/pre>\n<p>Now we can do some checks if the temBoard server and agent are installed correctly, and afterwards we can start the server and the agent.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ rpm -qa | grep temboard\r\ntemboard-9.0.0-1.el9.noarch\r\ntemboard-agent-9.0.0-1.el9.noarch\r\n<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ sudo systemctl start temboard.service\r\n$ sudo systemctl start temboard-agent@PGMP01A.service\r\n<\/pre>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ sudo systemctl status temboard.service\r\n\u25cf temboard.service - temBoard Server\r\n     Loaded: loaded (\/etc\/systemd\/system\/temboard.service; disabled; preset: disabled)\r\n    Drop-In: \/etc\/systemd\/system\/temboard.service.d\r\n             \u2514\u2500override.conf\r\n     Active: active (running) since Mon 2024-10-21 09:00:57 CEST; 16s ago\r\n   Main PID: 3446580 (temboard)\r\n      Tasks: 30 (limit: 306229)\r\n     Memory: 642.5M\r\n        CPU: 7.033s\r\n     CGroup: \/system.slice\/temboard.service\r\n             \u251c\u25003446580 &quot;temboard: web&quot;\r\n             \u251c\u25003446584 &quot;temboard: scheduler&quot;\r\n             \u251c\u25003446585 &quot;temboard: worker pool&quot;\r\n             \u251c\u25003446592 &quot;temboard: task temboardui.plugins.monitoring.aggregate_data_worker&quot;\r\n             \u251c\u25003446593 &quot;temboard: task temboardui.plugins.monitoring.history_tables_worker&quot;\r\n             \u251c\u25003446595 &quot;temboard: task temboardui.plugins.monitoring.purge_data_worker&quot;\r\n             \u251c\u25003446599 &quot;temboard: task temboardui.plugins.statements.pull_data_worker&quot;\r\n             \u251c\u25003446600 &quot;temboard: task temboardui.plugins.statements.statements_purge_worker&quot;\r\n             \u251c\u25003446620 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446621 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446624 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446625 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446626 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446630 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446631 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446634 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446635 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446636 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446637 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446639 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446640 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446642 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446647 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446649 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446650 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446652 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u251c\u25003446653 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n             \u2514\u25003446655 &quot;temboard: task temboardui.plugins.monitoring.collector_batch&quot;\r\n\r\nOct 21 09:00:57 host01 systemd&#x5B;1]: Started temBoard Server.\r\nOct 21 09:00:58 host01 temboard&#x5B;3446580]: INFO:  app: Starting temboard 9.0.0.\r\nOct 21 09:00:58 host01 temboard&#x5B;3446580]: INFO:  app: Using config file \/etc\/temboard\/temboard.conf.\r\n\r\n$ sudo systemctl status temboard-agent@PGMP01A.service\r\n\u25cf temboard-agent@PGMP01A.service - PostgreSQL Remote Control Agent PGMP01A\r\n     Loaded: loaded (\/usr\/lib\/systemd\/system\/temboard-agent@.service; enabled; preset: disabled)\r\n     Active: active (running) since Mon 2024-10-21 09:01:05 CEST; 19s ago\r\n   Main PID: 3446757 (temboard-agent)\r\n      Tasks: 6 (limit: 306229)\r\n     Memory: 37.2M\r\n        CPU: 381ms\r\n     CGroup: \/system.slice\/system-temboard\\x2dagent.slice\/temboard-agent@PGMP01A.service\r\n             \u251c\u25003446757 &quot;temboard-agent: PGMP01A: web&quot;\r\n             \u251c\u25003446764 &quot;temboard-agent: PGMP01A: scheduler&quot;\r\n             \u251c\u25003446765 &quot;temboard-agent: PGMP01A: worker pool&quot;\r\n             \u2514\u25003446834 &quot;temboard-agent: PGMP01A: task temboardagent.plugins.dashboard.dashboard_collector_batch_worker&quot;\r\n\r\nOct 21 09:01:05 host01 systemd&#x5B;1]: Started PostgreSQL Remote Control Agent PGMP01A.\r\nOct 21 09:01:05 host01 temboard-agent&#x5B;3446757]: INFO:  app: Starting temboard-agent 9.0.0.\r\n<\/pre>\n<p>Check if the new temboard ui and temboard agent version is correct.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n$ temboard --version\r\nINFO:  app: Starting temboard 9.0.0.\r\ntemBoard 9.0.0 (\/usr\/bin\/temboard)\r\nSystem Red Hat Enterprise Linux 9.4 (Plow)\r\nPython 3.9.18 (\/usr\/bin\/python3)\r\ncryptography 36.0.1\r\nTornado 6.1\r\nFlask 2.0.3\r\nlibpq 13.11\r\npsycopg2 2.8.6 (dt dec pq3 ext lo64)\r\nSQLAlchemy 1.4.45\r\n\r\n\r\n$ temboard-agent --version\r\nINFO:  app: Starting temboard-agent 9.0.0.\r\ntemBoard agent 9.0.0 (\/usr\/bin\/temboard-agent)\r\nSystem Red Hat Enterprise Linux 9.4 (Plow)\r\nPython 3.9.18 (\/usr\/bin\/python3)\r\nbottle 0.12.21\r\ncryptography 36.0.1\r\nlibpq 13.11\r\npsycopg2 2.8.6 (dt dec pq3 ext lo64)\r\n<\/pre>\n<p>Now, everything is fine and we are ready to go.<\/p>\n<h3>Conclusion<\/h3>\n<p>That was quite a huge new release from Dalibo with quite a lot cool new stuff. I will write a few blog posts about the new features in temBoard version 9.0 very soon. Have fun with the new version.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dalibo released on the 18th of October temBoard version 9.0.0. The new release comes with a lot of new features. The breaking changes are: Replace instance groups and user groups by Environment. An instance must be in one and single environment temBoard agent v8 can\u2019t register to temBoard UI v9 Use temboard register to register [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[2,6,7],"tags":[17,21,24],"class_list":["post-437","post","type-post","status-publish","format-standard","hentry","category-db","category-postgresql","category-red-hat","tag-monitoring","tag-postgresql","tag-temboard","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x - ptdb - Platinum DB<\/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:\/\/ptdb.ch\/?p=437\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x - ptdb - Platinum DB\" \/>\n<meta property=\"og:description\" content=\"Dalibo released on the 18th of October temBoard version 9.0.0. The new release comes with a lot of new features. The breaking changes are: Replace instance groups and user groups by Environment. An instance must be in one and single environment temBoard agent v8 can\u2019t register to temBoard UI v9 Use temboard register to register [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ptdb.ch\/?p=437\" \/>\n<meta property=\"og:site_name\" content=\"ptdb - Platinum DB\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-23T06:26:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-10T09:50:21+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ptdb.ch\\\/?p=437#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ptdb.ch\\\/?p=437\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/ptdb.ch\\\/#\\\/schema\\\/person\\\/0b7baf52d23e71d85e1c95442306090b\"},\"headline\":\"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x\",\"datePublished\":\"2024-10-23T06:26:06+00:00\",\"dateModified\":\"2025-12-10T09:50:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ptdb.ch\\\/?p=437\"},\"wordCount\":3038,\"keywords\":[\"Monitoring\",\"PostgreSQL\",\"temBoard\"],\"articleSection\":[\"DB\",\"PostgreSQL\",\"Red Hat\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ptdb.ch\\\/?p=437\",\"url\":\"https:\\\/\\\/ptdb.ch\\\/?p=437\",\"name\":\"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x - ptdb - Platinum DB\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ptdb.ch\\\/#website\"},\"datePublished\":\"2024-10-23T06:26:06+00:00\",\"dateModified\":\"2025-12-10T09:50:21+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ptdb.ch\\\/#\\\/schema\\\/person\\\/0b7baf52d23e71d85e1c95442306090b\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ptdb.ch\\\/?p=437#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ptdb.ch\\\/?p=437\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ptdb.ch\\\/?p=437#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ptdb.ch\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ptdb.ch\\\/#website\",\"url\":\"https:\\\/\\\/ptdb.ch\\\/\",\"name\":\"ptdb - Platinum DB\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ptdb.ch\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ptdb.ch\\\/#\\\/schema\\\/person\\\/0b7baf52d23e71d85e1c95442306090b\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\\\/\\\/ptdb.ch\"],\"url\":\"https:\\\/\\\/ptdb.ch\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x - ptdb - Platinum DB","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:\/\/ptdb.ch\/?p=437","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x - ptdb - Platinum DB","og_description":"Dalibo released on the 18th of October temBoard version 9.0.0. The new release comes with a lot of new features. The breaking changes are: Replace instance groups and user groups by Environment. An instance must be in one and single environment temBoard agent v8 can\u2019t register to temBoard UI v9 Use temboard register to register [&hellip;]","og_url":"https:\/\/ptdb.ch\/?p=437","og_site_name":"ptdb - Platinum DB","article_published_time":"2024-10-23T06:26:06+00:00","article_modified_time":"2025-12-10T09:50:21+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ptdb.ch\/?p=437#article","isPartOf":{"@id":"https:\/\/ptdb.ch\/?p=437"},"author":{"name":"admin","@id":"https:\/\/ptdb.ch\/#\/schema\/person\/0b7baf52d23e71d85e1c95442306090b"},"headline":"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x","datePublished":"2024-10-23T06:26:06+00:00","dateModified":"2025-12-10T09:50:21+00:00","mainEntityOfPage":{"@id":"https:\/\/ptdb.ch\/?p=437"},"wordCount":3038,"keywords":["Monitoring","PostgreSQL","temBoard"],"articleSection":["DB","PostgreSQL","Red Hat"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ptdb.ch\/?p=437","url":"https:\/\/ptdb.ch\/?p=437","name":"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x - ptdb - Platinum DB","isPartOf":{"@id":"https:\/\/ptdb.ch\/#website"},"datePublished":"2024-10-23T06:26:06+00:00","dateModified":"2025-12-10T09:50:21+00:00","author":{"@id":"https:\/\/ptdb.ch\/#\/schema\/person\/0b7baf52d23e71d85e1c95442306090b"},"breadcrumb":{"@id":"https:\/\/ptdb.ch\/?p=437#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ptdb.ch\/?p=437"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ptdb.ch\/?p=437#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ptdb.ch\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL: How to Upgrade temBoard from 8.2.1 to 9.0.0 on Red Hat 9.x"}]},{"@type":"WebSite","@id":"https:\/\/ptdb.ch\/#website","url":"https:\/\/ptdb.ch\/","name":"ptdb - Platinum DB","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ptdb.ch\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ptdb.ch\/#\/schema\/person\/0b7baf52d23e71d85e1c95442306090b","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/ptdb.ch"],"url":"https:\/\/ptdb.ch\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/posts\/437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ptdb.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=437"}],"version-history":[{"count":13,"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/posts\/437\/revisions"}],"predecessor-version":[{"id":485,"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/posts\/437\/revisions\/485"}],"wp:attachment":[{"href":"https:\/\/ptdb.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ptdb.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ptdb.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}