Skip to content
Example of using Postgres for Recursive Tree SQL in a Rails app
Ruby JavaScript
Find file
Failed to load latest commit information.
app Prefer SQL joins to subqueries
config Add basic views for demonstration
db Add seeds for development
lib Basic Rails application
log Basic Rails application
public Add basic views for demonstration
script Basic Rails application
spec Implement 'all descendent cat pictures'
vendor Basic Rails application
.gitignore Basic Rails application
.rspec Add Ruby implementation
Gemfile
Gemfile.lock Use standard Hashrocket setup
README.md
Rakefile Basic Rails application
config.ru Basic Rails application

README.md

Example application for demonstrating tree SQL

Setup

Obviously:

bundle

Edit config/database.yml as needed, then run:

rake db:setup db:test:prepare

Keep the tests passing:

rake

SQL

After seeding the database, you can run rails dbconsole and play with the following query:

WITH RECURSIVE search_tree(id, name, path) AS (
  SELECT id, name, ARRAY[id]
  FROM categories
  WHERE parent_id IS NULL
UNION ALL
  SELECT categories.id, categories.name, path || categories.id
  FROM search_tree
  JOIN categories ON categories.parent_id=search_tree.id
  WHERE NOT categories.id = ANY(path)
)
SELECT * FROM search_tree
ORDER BY path
;
Something went wrong with that request. Please try again.