{"id":10957,"date":"2024-05-08T20:24:02","date_gmt":"2024-05-09T01:24:02","guid":{"rendered":"https:\/\/www.rushworth.us\/lisa\/?p=10957"},"modified":"2024-05-21T20:41:01","modified_gmt":"2024-05-22T01:41:01","slug":"10957","status":"publish","type":"post","link":"https:\/\/www.rushworth.us\/lisa\/?p=10957","title":{"rendered":"Postgresql and Timescale with RedHat VDO"},"content":{"rendered":"<p>RedHat is phasing out ZFS \u2013 there are several reasons for this move, but primarily ZFS is a closed source Solaris (now Oracle) codebase. While OpenZFS exists, it&#8217;s not quite &#8216;the same&#8217;. RedHat&#8217;s preferred solution is <a class=\"external-link\" href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/7\/html-single\/storage_administration_guide\/index#vdo\" target=\"_blank\" rel=\"nofollow noopener\" data-ext-link-init=\"true\">Virtual Data Optimizer (VDO)<\/a>. This page walks through the process of installing PostgreSQL and creating a database cluster on VDO and installing TimescaleDB extension on the database cluster for RedHat Enterprise 8 (RHEL8)<\/p>\n<p>Before we create a VDO disk, we need to install it<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_440186\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">yum <\/code><code class=\"bash functions\">install<\/code> <code class=\"bash plain\">vdo kmod-kvdo<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Then we need to create a vdo \u2013 here a VDO named &#8216;PGData&#8217; is created on \/dev\/sdb\u00a0\u2013 a 9TB volume on which we will hold 16TB<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_17300\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">vdo create --name=PGData --device=<\/code><code class=\"bash plain\">\/dev\/sdb<\/code> <code class=\"bash plain\">--vdoLogicalSize=16T<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Check to verify that the object was created\u00a0\u2013 it is \/dev\/mapper\/PGData in this instance<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_469085\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">vdo list<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Now format the volume using xfs.<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_71075\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">mkfs.xfs <\/code><code class=\"bash plain\">\/dev\/mapper\/PGData<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>And finally add a mount point<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_143980\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash comments\"># Create the mount point folder<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash functions\">mkdir<\/code> <code class=\"bash plain\">\/pgpool<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash comments\"># Update fstab to mount the new volume to that mount pint<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash functions\">cat<\/code> <code class=\"bash plain\">\/etc\/fstab<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">\/dev\/mapper\/PGData<\/code> <code class=\"bash plain\">\/pgpool<\/code> <code class=\"bash plain\">xfs defaults,x-systemd.requires=vdo.service 0 0<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash comments\"># Load the updated fstab<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash plain\">systemctl daemon-reload<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"bash comments\"># and mount the volume<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"bash functions\">mount<\/code> <code class=\"bash plain\">-a<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>it should be mounted at &#8216;\/pgpool\/&#8217;<\/p>\n<p>The main reason for using VDO with Postgres is because of its compression feature\u00a0\u2013 this is automatically enabled, although we may need to tweak settings as we test it.<\/p>\n<p>We now have a place in our pool where we want our Postgres database to store its data. So let&#8217;s go ahead and install PostgreSQL,<\/p>\n<p>here we are using RHEL8 and installing PostgreSQL 12<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_326160\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash comments\"># Install the repository RPM:<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">dnf <\/code><code class=\"bash functions\">install<\/code> <code class=\"bash plain\">-y https:<\/code><code class=\"bash plain\">\/\/download<\/code><code class=\"bash plain\">.postgresql.org<\/code><code class=\"bash plain\">\/pub\/repos\/yum\/reporpms\/EL-8-x86_64\/pgdg-redhat-repo-latest<\/code><code class=\"bash plain\">.noarch.rpm<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">dnf clean all<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash comments\"># Disable the built-in PostgreSQL module:<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash plain\">dnf -qy module disable postgresql<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash comments\"># Install PostgreSQL:<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"bash plain\">dnf <\/code><code class=\"bash functions\">install<\/code> <code class=\"bash plain\">-y postgresql12-server<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Once the installation is done we need to initiate the database cluster and start the server . Since we want our Postgres to store data in our VDO volume we need to initialize it into our custom directory, we can do that in many ways,<\/p>\n<p>In all cases we need to make sure that the mount point of our zpool i.e., &#8216;\/pgpool\/pgdata\/&#8217; is owned by the &#8216;postgres&#8217; user which is created when we install PostgreSQL. We can do that by running the below command before running below steps for starting the postgres server<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_668550\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash functions\">mkdir<\/code> <code class=\"bash plain\">\/pgpool\/pgdata<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash functions\">chown<\/code> <code class=\"bash plain\">-R postgres:postgres <\/code><code class=\"bash plain\">\/pgpool<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Customize the systemd service by editing the postgresql-12 unit file and updateding the PGDATA environment variable<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_86872\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">vdotest-uos:pgpool <\/code><code class=\"bash comments\"># grep Environment \/usr\/lib\/systemd\/system\/postgresql-12.service<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash comments\"># Note: avoid inserting whitespace in these Environment= lines, or you may<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">Environment=PGDATA=<\/code><code class=\"bash plain\">\/pgpool\/pgdata<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>and\u00a0 then initialize, enable and start our server as below<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_621343\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">\/usr\/pgsql-12\/bin\/postgresql-12-setup<\/code> <code class=\"bash plain\">initdb<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">systemctl <\/code><code class=\"bash functions\">enable<\/code> <code class=\"bash plain\">postgresql-12<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">systemctl start postgresql-12<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Here &#8216;\/usr\/pgsql-12\/bin\/&#8217; is the bin directory of postgres installation you can substitute it with your bin directory path.<\/p>\n<p>or<\/p>\n<p>We can also directly give the data directory value while initializing db using below command<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_389768\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">\/usr\/pgsql-12\/bin\/initdb<\/code> <code class=\"bash plain\">-D <\/code><code class=\"bash plain\">\/pgpool\/pgdata\/<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>and then start the server using<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_584196\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">systemctl start postgresql-12<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Now we have installed postgreSQL and started the server, we will install the Timescale extension for Postgres now.<\/p>\n<p>add the time scale repo with below command<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_58648\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash functions\">tee<\/code> <code class=\"bash plain\">\/etc\/yum<\/code><code class=\"bash plain\">.repos.d<\/code><code class=\"bash plain\">\/timescale_timescaledb<\/code><code class=\"bash plain\">.repo &lt;&lt;EOL<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">[timescale_timescaledb]<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">name=timescale_timescaledb<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">baseurl=https:<\/code><code class=\"bash plain\">\/\/packagecloud<\/code><code class=\"bash plain\">.io<\/code><code class=\"bash plain\">\/timescale\/timescaledb\/el\/8\/<\/code><code class=\"bash plain\">\\$basearch<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">repo_gpgcheck=1<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash plain\">gpgcheck=0<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash plain\">enabled=1<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash plain\">gpgkey=https:<\/code><code class=\"bash plain\">\/\/packagecloud<\/code><code class=\"bash plain\">.io<\/code><code class=\"bash plain\">\/timescale\/timescaledb\/gpgkey<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"bash plain\">sslverify=1<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"bash plain\">sslcacert=<\/code><code class=\"bash plain\">\/etc\/pki\/tls\/certs\/ca-bundle<\/code><code class=\"bash plain\">.crt<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"bash plain\">metadata_expire=300<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"bash plain\">EOL<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"bash functions\">sudo<\/code> <code class=\"bash plain\">yum update -y<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>then install\u00a0 it using below command<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_183857\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">yum <\/code><code class=\"bash functions\">install<\/code> <code class=\"bash plain\">-y timescaledb-postgresql-12<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>After installing we need to add &#8216;timescale&#8217; to <strong>shared_preload_libraries<\/strong> in our <strong>postgresql.conf<\/strong>, Timescale gives us &#8216;<strong>timescaledb-tune<\/strong>&#8216; which can be used for this and also configuring different settings for our database. Since we initialize our PG database cluster in a custom location we need to point the direction of postgresql.conf to timescaledb-tune it also requires a path to our pg_config file we can do both by following command.<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_963821\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">timescaledb-tune --pg-config=<\/code><code class=\"bash plain\">\/usr\/pgsql-12\/bin\/pg_config<\/code> <code class=\"bash plain\">--conf-path=<\/code><code class=\"bash plain\">\/pgpool\/pgdata\/postgresql<\/code><code class=\"bash plain\">.conf<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>After running above command we need to restart our Postgres server, we can do that by one of the below commands<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_2660\" class=\"syntaxhighlighter sh-midnight nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">systemctl restart postgresql-12<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>After restarting using one of the above commands connect to the database you want to use Timescale hypertables in and run below statement to load Timescale extension<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_369396\" class=\"syntaxhighlighter sh-midnight nogutter sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql keyword\">CREATE<\/code> <code class=\"sql plain\">EXTENSION IF <\/code><code class=\"sql color1\">NOT<\/code> <code class=\"sql plain\">EXISTS timescaledb <\/code><code class=\"sql keyword\">CASCADE<\/code><code class=\"sql plain\">;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>you can check if Timescale is loaded by passing &#8216;\\dx&#8217; command to psql which will load the extension list.<\/p>\n<p>in order to configure PostgreSQL to allow remote connection we need to do couple of changes as below<\/p>\n","protected":false},"excerpt":{"rendered":"<p>RedHat is phasing out ZFS \u2013 there are several reasons for this move, but primarily ZFS is a closed source Solaris (now Oracle) codebase. While OpenZFS exists, it&#8217;s not quite &#8216;the same&#8217;. RedHat&#8217;s preferred solution is Virtual Data Optimizer (VDO). This page walks through the process of installing PostgreSQL and creating a database cluster on &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1522,30],"tags":[294,1349,2011,1195,2010,2012,2013,2014],"class_list":["post-10957","post","type-post","status-publish","format-standard","hentry","category-postgresql","category-system-administration","tag-linux","tag-postgresql","tag-postgresql12","tag-redhat","tag-rhel8","tag-timescale","tag-vdo","tag-virtual-data-optimizer"],"_links":{"self":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/10957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10957"}],"version-history":[{"count":3,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/10957\/revisions"}],"predecessor-version":[{"id":10960,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=\/wp\/v2\/posts\/10957\/revisions\/10960"}],"wp:attachment":[{"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rushworth.us\/lisa\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}