{"id":7167,"date":"2015-09-30T12:15:42","date_gmt":"2015-09-30T09:15:42","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=7167"},"modified":"2015-12-16T11:16:27","modified_gmt":"2015-12-16T09:16:27","slug":"heroku-data-links-postgres-redis","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/","title":{"rendered":"Heroku Data Links with Postgres and Redis"},"content":{"rendered":"<p>PostgreSQL has a great feature called <a href=\"http:\/\/www.postgresql.org\/docs\/9.4\/static\/sql-createforeigndatawrapper.html\">Foreign Data Wrappers (FDW)<\/a> that allows it to connect directly to <a href=\"https:\/\/wiki.postgresql.org\/wiki\/Foreign_data_wrappers\">outside systems<\/a>. Although the setup can be a little complicated, once it\u2019s available you can run queries with joins or subqueries against them, insert data, create views, etc. Heroku has dramatically simplified the process of using FDW with <a href=\"https:\/\/www.heroku.com\/postgres\">PostgreSQL<\/a> and <a href=\"https:\/\/elements.heroku.com\/addons\/heroku-redis\">Redis<\/a> thanks to <a href=\"https:\/\/blog.heroku.com\/archives\/2015\/6\/25\/heroku-redis-ga-and-introducing-heroku-data-links#introducing-heroku-data-links\">Data Links<\/a>. Let\u2019s try it out.<\/p>\n<h2>Data Links<\/h2>\n<p>We previously used data links with <a href=\"http:\/\/blog.codeship.com\/use-heroku-pgbackups\/\">Heroku PGBackups<\/a> when we used it to connect our live PostgreSQL database to a recently restored backup. That enabled us to run a query across both to reload our accidentally deleted data. That was awesome, I know\u2026 but we were only scratching the surface.<\/p>\n<p>PostgreSQL is amazing. It\u2019s the \u201chow did I ever live without this\u201d experience once you <a href=\"http:\/\/www.brightball.com\/postgresql\/why-should-you-learn-postgresql\">tap into its goodness<\/a>. But despite its features, it still has use cases for which it isn\u2019t ideal, just like any other relational database. Foreign data wrappers virtually remove this problem by allowing you to offload the parts of your data that are better suited to other systems, while still allowing PostgreSQL to interact with them and query them just as if they were in any other table.<\/p>\n<p>Redis, as it turns out, is an excellent fit for almost every case where PostgreSQL might not be ideal. As an in-memory data store, it is ideally suited for high-traffic direct requests for both reads and writes, including specialty data structures like sorted sets, expiring data, pubsub, and more. These structures provide a level of functionality on par with shared objects in a threaded system, without having to deal with the mutex locks and single system limitations of shared objects in a threaded system.<\/p>\n<p>When you put the two together, you\u2019ll be hard pressed to find a data problem that you can\u2019t solve that doesn\u2019t just involve outgrowing the machine. Data links puts them together. You\u2019re welcome.<\/p>\n<h2>Get Connected<\/h2>\n<p>Feel free to walk through these code examples with me. However, be aware that Heroku Data Links is only available on production tier Heroku PostgreSQL databases using 9.4 and above. That means you\u2019ll have to pay to play. Detailed instructions can be <a href=\"https:\/\/devcenter.heroku.com\/articles\/heroku-data-links\">found here<\/a>, but so we can get to showing off faster, I\u2019m going to skip ahead.<\/p>\n<p>Once your production tier database is set up using the <a href=\"https:\/\/devcenter.heroku.com\/articles\/getting-started-with-ruby#prepare-the-app\">Ruby getting started app<\/a>, provision <a href=\"https:\/\/devcenter.heroku.com\/articles\/heroku-redis\">Heroku Redis<\/a> and then link them up like so:<\/p>\n<pre class=\" brush:php\">$ heroku pg:links create REDIS_URL DATABASE_URL --as hredis<\/pre>\n<p>And to see that it worked:<\/p>\n<pre class=\" brush:php\">$ heroku pg:links \r\n=== DATABASE_URL (postgresql-vertical-7958) \r\n==== redis_sinuous_9442 \r\nCreated: 2015-09-11 03:44 UTC \r\nRemote: REDIS_URL (redis-sinuous-9442) \r\nRemote Name: redis_sinuous_9442\r\n\r\n=== HEROKU_POSTGRESQL_ONYX_URL (postgresql-vertical-7958) \r\n==== redis_sinuous_9442 \r\nCreated: 2015-09-11 03:44 UTC \r\nRemote: REDIS_URL (redis-sinuous-9442) \r\nRemote Name: redis_sinuous_9442<\/pre>\n<p>Perfect! Now, let\u2019s have some fun.<\/p>\n<h2>Query Against Outside Data<\/h2>\n<p>Data makes the world go round, but disk writes create more strain on a machine than almost anything else. Counters are a good example to illustrate the problem, because you can use a counter for virtually anything. Could be view counters, usage throttling counters, download counters, share counters, click counters, etc. Usually, there will be some type of database record associated with what you\u2019re counting whether that\u2019s a blog post, a user record or something else.<\/p>\n<p>PostgreSQL takes no chances with your data, insisting that it be written to disk before it will tell you the write was successful. Redis can write to disk at an interval, such as every second, allowing it to handle logic like this much, much faster.<\/p>\n<p>Here\u2019s a quick benchmark of running an increment on 25 records in 10 concurrent threads 50,000 times, so it\u2019s clear:<\/p>\n<pre class=\" brush:php\">p = Benchmark.measure do \r\n  threads = [] \r\n  10.times { threads &lt;&lt; Thread.new { puts Benchmark.measure { 50000.times { |i| Widget.increment_counter(:stock, (i % 25) + 1) } }.real } } \r\n  threads.each { |thr| thr.join } \r\nend \r\nputs \"PostgreSQL: #{p.real} seconds\"\r\n\r\nPostgreSQL: 258.2195017640479 seconds\r\n\r\nr = Benchmark.measure do \r\n  threads = [] \r\n  10.times { threads &lt;&lt; Thread.new { puts Benchmark.measure { $redis.pipelined { 50000.times { |i| $redis.incr \"widget:#{(i % 25) + 1}\" } } }.real } } \r\n  threads.each { |thr| thr.join } \r\nend \r\nputs \"Redis: #{r.real} seconds\"\r\n\r\nRedis: 4.218563660047948 seconds<\/pre>\n<p>With the two connected via Data Link, I can run a query in PostgreSQL to join against the Redis data and include it in my query results like so:<\/p>\n<pre class=\" brush:php\">SELECT w.id, w.name, w.stock, r.value my_counter\r\nFROM widgets w\r\n  INNER JOIN hredis.redis r ON r.key = CONCAT('widget:',w.id)\r\nORDER BY r.value DESC<\/pre>\n<p>Because it\u2019s just another query, I can create a view from that. Or I can create a <a href=\"https:\/\/devcenter.heroku.com\/articles\/dataclips\">Dataclip<\/a> to send around the office.<\/p>\n<p>That\u2019s just one use case, but you should be getting the idea of how you can include live analytic data into your queries at this point. To do more complex queries, you can periodically write needed values to a cache column in PostgreSQL with a single INSERT\/UPDATE statement directly referencing Redis. That makes it a lot easier to combine PG functionality to run a full text search that\u2019s geographically limited with PostGIS data against live\/trending popularity data in a performant way. There are a lot of possibilities that open up.<\/p>\n<h2>Push Data Out<\/h2>\n<p>Unfortunately, at the moment the Redis link is read-only. When FDW functionality is expanded to take <a href=\"https:\/\/github.com\/pg-redis-fdw\/redis_fdw\">advantage of write logic<\/a>, it opens a great many more doors, such as using a trigger to write data out to Redis or <a href=\"https:\/\/github.com\/ohmu\/pgmemcache\/\">Memcached<\/a> as it\u2019s updated.<\/p>\n<p>In very high-performance environments, this can assist in offloading certain read traffic entirely from PostgreSQL by letting it push changes out to caches directly ensuring that cache management or expiration are no longer concerns. To alleviate concerns over any direct wrapper limitations, you can always leverage LISTEN\/NOTIFY behavior with an outside script to push changes directly out to caches as well.<\/p>\n<p>Happy linking!<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/blog.codeship.com\/heroku-data-links-postgres-redis\/\">Heroku Data Links with Postgres and Redis<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/wcg\/\">WCG partner<\/a> Florian Motlik at the <a href=\"http:\/\/blog.codeship.com\/\">Codeship Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>PostgreSQL has a great feature called Foreign Data Wrappers (FDW) that allows it to connect directly to outside systems. Although the setup can be a little complicated, once it\u2019s available you can run queries with joins or subqueries against them, insert data, create views, etc. Heroku has dramatically simplified the process of using FDW with &hellip;<\/p>\n","protected":false},"author":120,"featured_media":1649,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[244,245,246],"class_list":["post-7167","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-nosql","tag-heroku","tag-postgres","tag-redis"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Heroku Data Links with Postgres and Redis - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"PostgreSQL has a great feature called Foreign Data Wrappers (FDW) that allows it to connect directly to outside systems. Although the setup can be a\" \/>\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.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Heroku Data Links with Postgres and Redis - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL has a great feature called Foreign Data Wrappers (FDW) that allows it to connect directly to outside systems. Although the setup can be a\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2015-09-30T09:15:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-12-16T09:16:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Barry Jones\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@brightball\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Barry Jones\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/\"},\"author\":{\"name\":\"Barry Jones\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/5ebda3eb9033013c2d363300e021cc3a\"},\"headline\":\"Heroku Data Links with Postgres and Redis\",\"datePublished\":\"2015-09-30T09:15:42+00:00\",\"dateModified\":\"2015-12-16T09:16:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/\"},\"wordCount\":854,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg\",\"keywords\":[\"Heroku\",\"Postgres\",\"Redis\"],\"articleSection\":[\"NoSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/\",\"name\":\"Heroku Data Links with Postgres and Redis - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg\",\"datePublished\":\"2015-09-30T09:15:42+00:00\",\"dateModified\":\"2015-12-16T09:16:27+00:00\",\"description\":\"PostgreSQL has a great feature called Foreign Data Wrappers (FDW) that allows it to connect directly to outside systems. Although the setup can be a\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NoSQL\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/nosql\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Heroku Data Links with Postgres and Redis\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/5ebda3eb9033013c2d363300e021cc3a\",\"name\":\"Barry Jones\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/21b1c62bf13dbef5851b07329e4e82ca7932a42b9885217262d8236a209072db?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/21b1c62bf13dbef5851b07329e4e82ca7932a42b9885217262d8236a209072db?s=96&d=mm&r=g\",\"caption\":\"Barry Jones\"},\"description\":\"Barry is a business owner, infrastructure nut, and database obsessed web developer who spends too much time in Ruby, Go and PHP code. He blogs about it at brightball.com.\",\"sameAs\":[\"http:\/\/brightball.com\/\",\"https:\/\/x.com\/brightball\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/barry-jones\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Heroku Data Links with Postgres and Redis - Web Code Geeks - 2026","description":"PostgreSQL has a great feature called Foreign Data Wrappers (FDW) that allows it to connect directly to outside systems. Although the setup can be a","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.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/","og_locale":"en_US","og_type":"article","og_title":"Heroku Data Links with Postgres and Redis - Web Code Geeks - 2026","og_description":"PostgreSQL has a great feature called Foreign Data Wrappers (FDW) that allows it to connect directly to outside systems. Although the setup can be a","og_url":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2015-09-30T09:15:42+00:00","article_modified_time":"2015-12-16T09:16:27+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg","type":"image\/jpeg"}],"author":"Barry Jones","twitter_card":"summary_large_image","twitter_creator":"@brightball","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Barry Jones","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/"},"author":{"name":"Barry Jones","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/5ebda3eb9033013c2d363300e021cc3a"},"headline":"Heroku Data Links with Postgres and Redis","datePublished":"2015-09-30T09:15:42+00:00","dateModified":"2015-12-16T09:16:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/"},"wordCount":854,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg","keywords":["Heroku","Postgres","Redis"],"articleSection":["NoSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/","url":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/","name":"Heroku Data Links with Postgres and Redis - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg","datePublished":"2015-09-30T09:15:42+00:00","dateModified":"2015-12-16T09:16:27+00:00","description":"PostgreSQL has a great feature called Foreign Data Wrappers (FDW) that allows it to connect directly to outside systems. Although the setup can be a","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/nosql-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/nosql\/heroku-data-links-postgres-redis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"NoSQL","item":"https:\/\/www.webcodegeeks.com\/category\/nosql\/"},{"@type":"ListItem","position":3,"name":"Heroku Data Links with Postgres and Redis"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/5ebda3eb9033013c2d363300e021cc3a","name":"Barry Jones","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/21b1c62bf13dbef5851b07329e4e82ca7932a42b9885217262d8236a209072db?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21b1c62bf13dbef5851b07329e4e82ca7932a42b9885217262d8236a209072db?s=96&d=mm&r=g","caption":"Barry Jones"},"description":"Barry is a business owner, infrastructure nut, and database obsessed web developer who spends too much time in Ruby, Go and PHP code. He blogs about it at brightball.com.","sameAs":["http:\/\/brightball.com\/","https:\/\/x.com\/brightball"],"url":"https:\/\/www.webcodegeeks.com\/author\/barry-jones\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/7167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/120"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=7167"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/7167\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/1649"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=7167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=7167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=7167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}