← Extractions

From PostgreSQL to SQLite in Rails — Wojtek Wrona at wroclove.rb 2025

Wojtek Wrona recounts migrating his startup's Rails application from PostgreSQL on Render to SQLite deployed on Hetzner via Hatchbox, driven by simplicity, performance and cost. The talk details the incremental migration strategy (schema-first, then data), trade-offs around types, arrays, constraints, concurrency, foreign-key errors, single-node limits, and operational changes (backups with Litestream + scheduled dumps to Cloudflare R2).

Model
claude-opus-4-7
Ingestion
bb676ab2
Input tokens
556,293
fresh
395,823
cached
148,512
cache write
11,958
Output tokens
19,608
Duration
304.9s
Roundtrips
10
Tool calls
25
Cost
$0.00
Nodes/edges extracted
31 / 54
Read set (nodes/edges)
135 / 2

Nodes (31)

create Cloudflare R2 tool
kind (empty) tool
name (empty) Cloudflare R2
slug (empty) cloudflare-r2
attrs (empty) {"category" => "service"}
description (empty) Cloudflare's S3-compatible object storage service. Wrona's team uses R2 as the backup target for Litestream streaming...
short_description (empty) Cloudflare's S3-compatible object storage with no egress fees.
create Biggest table and total database size? question
kind (empty) question
name (empty) Biggest table and total database size?
slug (empty) biggest-table-and-total-database-size
attrs (empty) {"answer_summary" => "~1 GB total; largest table on the order of tens of thousands of rows."}
description (empty) Audience question about scale. Answer: database is just over 1 GB. Largest table has on the order of tens of thousand...
short_description (empty) How large is the production SQLite database?
create Is Active Record N+1 still a problem on SQLite? question
kind (empty) question
name (empty) Is Active Record N+1 still a problem on SQLite?
slug (empty) is-active-record-n-1-still-a-problem-on-sqlite
attrs (empty) {"answer_summary" => "Agreed — SQLite removes most per-query cost but Active Record allocation overhead means N+1 eli...
description (empty) Audience note: while SQLite has much less per-query overhead, Active Record still allocates model objects and uses Ru...
short_description (empty) Does reduced query overhead really eliminate N+1 concerns?
update Wojtek Wrona person
attrs (empty) {"role" => "backend developer"}
description Conference speaker. Backend developer (one of three in an 8-person startup) who migrated his team's Rails application from PostgreSQL to ...
short_description Conference speaker. Backend developer at a startup; wroclove.rb speaker on SQLite-on-Rails migration.
update From PostgreSQL to SQLite in Rails talk
description Talk at wroclove.rb 2025. Wojtek Wrona's wroclove.rb 2025 single-speaker talk describing a real migration of a production Rails application (18...
short_description Talk at wroclove.rb 2025. wroclove.rb 2025 talk on migrating a production Rails app from Postgres to SQLite.
create Render tool
kind (empty) tool
name (empty) Render
slug (empty) render
attrs (empty) {"category" => "platform"}
description (empty) Managed cloud platform similar to Heroku but cheaper. Wrona's team previously ran their Rails app on Render with Dock...
short_description (empty) Heroku-like managed platform for web apps and databases.
update Hatchbox tool
description Deployment platform cited as making it easy to throw a Rails application onto a single node — enough architecture, in... Deployment platform cited as making it easy to throw a Rails application onto a single node — 'Heroku for your own se...
update Hetzner company
description European hosting provider offering cheap bare-metal dedicated and cloud servers. Referenced in the talk as a way to g... European hosting provider offering cheap bare-metal and cloud servers. Wrona's team runs production on a 16-vCPU Hetz...
update SQLite tool
description Embedded public-domain SQL database engine. Extremely fast — the sqlite.org site itself handles ~20M SQL queries/day ... Embedded public-domain SQL database engine. Source files are concatenated into a single amalgamation compiled into th...
update PostgreSQL tool
description Open-source relational database; in Hasiński's opinion 'probably the best open-source project ever'. Extremely versat... Open-source relational database. In this talk framed as the incumbent being migrated away from. Postgres uses MVCC ro...
update Docker tool
description Container platform. Not used in the media platform project because, at the time, Docker was not yet popular and was n... Container platform. Wrona's team used Docker on Render for extra dependencies, but eliminated Docker from their pipel...
update Solid Cache project
description Database-backed Active Support cache store in the 'solid' ecosystem. Enables Rails applications to use a SQL database... Database-backed Active Support cache store in the 'solid' ecosystem. Uses its own SQLite database file, enabling Rail...
update Solid Queue project
description Database-backed background-job queue for Rails that lets Active Job run without Redis. Part of the new 'solid' ecosys... Database-backed background-job queue for Rails that lets Active Job run without Redis. Each Solid gem uses its own se...
short_description Database-backed Rails Active Job queuing backend, part of Rails' 'solid' ecosystem. Database-backed Rails Active Job queuing backend.
update Litestream tool
description Go-based utility by Ben Johnson that streams every operation from a SQLite WAL file to any S3-compatible object store... Go-based utility by Ben Johnson that streams every change from a SQLite WAL to any S3-compatible object store. Wrona'...
create libSQL tool
kind (empty) tool
name (empty) libSQL
slug (empty) libsql
attrs (empty) {"category" => "library"}
description (empty) Open-source fork of SQLite maintained by Turso. Ships an official Ruby adapter (ruby-libsql) and an 'embedded replica...
short_description (empty) Open-source SQLite fork by Turso with embedded replicas and managed cloud.
update Turso company
description Managed cloud SQLite service. Margheim cites Turso as 'one of the last generous free tiers in the managed-database sp... Company behind the libSQL fork of SQLite and a managed cloud SQLite service. Offers managed replication and recently ...
short_description Managed cloud SQLite service known for a generous free tier. Managed cloud SQLite service and sponsor of the libSQL fork.
create sqlpkg tool
kind (empty) tool
name (empty) sqlpkg
slug (empty) sqlpkg
attrs (empty) {"category" => "library"}
description (empty) Ruby gem that bundles a collection of common SQLite extensions (IP address handling, math, regex and more). On Rails ...
short_description (empty) Ruby gem bundling commonly useful SQLite extensions.
create Active Record Custom Types concept
kind (empty) concept
name (empty) Active Record Custom Types
slug (empty) active-record-custom-types
attrs (empty) {"category" => "pattern"}
description (empty) Active Record allows inheriting from ActiveRecord::Type::Value (or an array type) to define custom serialize/deserial...
short_description (empty) Rails pattern for serializing/deserializing Ruby objects in unsupported DB types.
create Incremental Migration Strategy concept
kind (empty) concept
name (empty) Incremental Migration Strategy
slug (empty) incremental-migration-strategy
attrs (empty) {"category" => "methodology"}
description (empty) Wrona's migration approach: make every change small, testable, reversible and independently deployable. Concretely: f...
short_description (empty) Migrate in small reversible steps rather than a big-bang cutover.
create SQLite COLLATE NOCASE concept
kind (empty) concept
name (empty) SQLite COLLATE NOCASE
slug (empty) sqlite-collate-nocase
attrs (empty) {"category" => "pattern"}
description (empty) SQLite supports specifying a collation function per column that determines how values are compared. Setting COLLATE N...
short_description (empty) SQLite per-column collation for case-insensitive comparisons.
create Custom SQLite Functions in Ruby concept
kind (empty) concept
name (empty) Custom SQLite Functions in Ruby
slug (empty) custom-sqlite-functions-in-ruby
attrs (empty) {"category" => "pattern"}
description (empty) Because SQLite runs inside the Ruby process, SQL queries can call Ruby code directly. Users can register scalar funct...
short_description (empty) Define scalar and aggregate SQL functions in Ruby callable from SQLite queries.
create SQLite Single-Writer Concurrency Trade-off concept
kind (empty) concept
name (empty) SQLite Single-Writer Concurrency Trade-off
slug (empty) sqlite-single-writer-concurrency-trade-off
attrs (empty) {"category" => "pattern"}
description (empty) In WAL mode SQLite allows any number of concurrent readers, but only one writer may hold a reserved lock at a time. R...
short_description (empty) SQLite allows many concurrent readers but only one writer at a time.
create SQLite Foreign Key Debugging concept
kind (empty) concept
name (empty) SQLite Foreign Key Debugging
slug (empty) sqlite-foreign-key-debugging
attrs (empty) {"category" => "practice"}
description (empty) Unlike Postgres, SQLite reports foreign-key violations only with an error code — no indication of which constraint, t...
short_description (empty) Diagnosing opaque foreign-key violations via PRAGMA foreign_key_check.
create Vertical Scaling Single Node concept
kind (empty) concept
name (empty) Vertical Scaling Single Node
slug (empty) vertical-scaling-single-node
attrs (empty) {"category" => "architecture"}
description (empty) Because SQLite has no network or IPC overhead, modern servers go a long way on one node. Hetzner Cloud offers up to 4...
short_description (empty) Scale SQLite workloads by running on a bigger single machine.
create Adopt SQLite to cut Rails infrastructure cost and DevOps overhead takeaway
kind (empty) takeaway
name (empty) Adopt SQLite to cut Rails infrastructure cost and DevOps overhead
slug (empty) adopt-sqlite-to-cut-rails-infrastructure-cost-and-devops-overhead
attrs (empty) {"type" => "recommendation"}
description (empty) Wrona's summary: driven by simplicity, lower cost, and limited team velocity, switching to SQLite made the app faster...
short_description (empty) A small team can replace Postgres+Render with SQLite on one server for ~10× less cost.
create Migrate schemas first, then data takeaway
kind (empty) takeaway
name (empty) Migrate schemas first, then data
slug (empty) migrate-schemas-first-then-data
attrs (empty) {"type" => "recommendation"}
description (empty) Avoid a big-bang cutover. Keep using Postgres while replacing unsupported types with Active Record custom types, adop...
short_description (empty) Make the schema SQLite-compatible while still on Postgres before swapping the adapter.
create How do you handle backups with SQLite? question
kind (empty) question
name (empty) How do you handle backups with SQLite?
slug (empty) how-do-you-handle-backups-with-sqlite
attrs (empty) {"answer_summary" => "Litestream streams WAL changes to Cloudflare R2 every second (48h PITR, easy dev replication) p...
description (empty) Audience question about backup strategy. Answer: two layers. (1) Litestream continuously replicates every change (onc...
short_description (empty) How does the team back up its SQLite production database?
create Why not use Solid Queue for heavy migrations? question
kind (empty) question
name (empty) Why not use Solid Queue for heavy migrations?
slug (empty) why-not-use-solid-queue-for-heavy-migrations
attrs (empty) {"answer_summary" => "Viable depending on the migration — Wrona thinks it could work."}
description (empty) Audience suggestion that heavy data migrations needing transactions could be broken into batches dispatched via Solid...
short_description (empty) Can Solid Queue in batches handle transactional heavy data migrations?
create Why not just run a local Postgres instance? question
kind (empty) question
name (empty) Why not just run a local Postgres instance?
slug (empty) why-not-just-run-a-local-postgres-instance
attrs (empty) {"answer_summary" => "Even local Postgres still has IPC overhead, connection-pool management and more ops work; SQLit...
description (empty) Audience question: wouldn't running Postgres on the same machine save most of the headaches and avoid the migration? ...
short_description (empty) Wouldn't local Postgres on the same machine give most of the benefits?
create How long ago did you migrate and have you regretted it? question
kind (empty) question
name (empty) How long ago did you migrate and have you regretted it?
slug (empty) how-long-ago-did-you-migrate-and-have-you-regretted-it
attrs (empty) {"answer_summary" => "~3 months ago; no regrets, only frustration being the opaque SQLite foreign-key error messages."}
description (empty) Audience question. Answer: migrated about three months before the talk. No real regrets — the app is much faster, Ren...
short_description (empty) Timing and regret about the migration.
create How did you migrate existing data and what was the downtime? question
kind (empty) question
name (empty) How did you migrate existing data and what was the downtime?
slug (empty) how-did-you-migrate-existing-data-and-what-was-the-downtime
attrs (empty) {"answer_summary" => "Used a tweaked open-source bash script against a Rails-created schema; ~1–2 hours of downtime."}
description (empty) Audience question. Answer: used an existing open-source bash script, slightly modified so that the schema was created...
short_description (empty) Process and downtime for the actual data migration.

Edges (54)

update Wojtek WronaauthoredFrom PostgreSQL to SQLite in Rails
context (empty) Wrona presented this single-speaker talk at wroclove.rb 2025.
update From PostgreSQL to SQLite in Railspresented_atwroclove.rb 2025
context (empty) Talk delivered at wroclove.rb 2025 on 2025-03-14.
create Wojtek Wronaattendedwroclove.rb 2024
context (empty) Wrona says attending wroclove.rb 2024 and seeing Stephen Margheim's SQLite talk influenced his decision to try SQLite.
relation (empty) attended
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) 748e0524-a102-41d4-97dc-575881583d91
create Wojtek Wronaattendedwroclove.rb 2025
context (empty) Speaker at the 2025 edition.
relation (empty) attended
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) 4a9688cf-482e-48ac-a0b5-de88900bdb2b
create From PostgreSQL to SQLite in RailsaboutSQLite
context (empty) Primary subject: migrating a Rails app to SQLite.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) a65d4872-7d76-4774-a7d5-e29e615de75a
create From PostgreSQL to SQLite in RailsaboutPostgreSQL
context (empty) Migration source database; many trade-offs are discussed relative to Postgres.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create From PostgreSQL to SQLite in RailsaboutRuby on Rails
context (empty) Migration is done inside a Rails application using Active Record.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create From PostgreSQL to SQLite in RailsaboutSolid Cache
context (empty) Adopted as part of the Solid Stack during the migration.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 24d8b6b6-e8b0-45cc-936c-58dd26744522
create From PostgreSQL to SQLite in RailsaboutSolid Queue
context (empty) Adopted as part of the Solid Stack during the migration.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) bc443bd9-cc27-4641-8b44-b26cbc448fde
create From PostgreSQL to SQLite in RailsaboutLitestream
context (empty) Used for continuous backup/replication to Cloudflare R2.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) c8b1820d-3884-4b11-aedc-e33d07ed1896
create From PostgreSQL to SQLite in RailsaboutHatchbox
context (empty) Used to deploy the Rails app to a single Hetzner node.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) ace2d786-db23-42f4-9d25-e0f4c3d4ae56
create From PostgreSQL to SQLite in RailsaboutRender
context (empty) Previous hosting platform replaced after migration.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 944ced70-8ff2-4c30-8e4d-e693061f76a1
create From PostgreSQL to SQLite in RailsaboutDocker
context (empty) Docker removed from the pipeline after the SQLite migration.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create From PostgreSQL to SQLite in RailsaboutlibSQL
context (empty) Presented as the path to multi-node SQLite when vertical scaling isn't enough.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 7251100c-2f4d-42cc-9689-3bddb4d4d7b1
create From PostgreSQL to SQLite in Railsaboutsqlpkg
context (empty) Extension packaging gem discussed for bundling SQLite extensions.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 3dc4ac48-2afc-4910-9b78-00b694470f65
create From PostgreSQL to SQLite in RailsaboutActive Record Custom Types
context (empty) Used to serialize Postgres-specific types for SQLite.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) faa8399a-eb20-4c22-b915-19657b71db19
create From PostgreSQL to SQLite in RailsaboutIncremental Migration Strategy
context (empty) Core methodology of the talk — schema first, data second, all reversible.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 2734d9ab-a42a-4586-b652-618d7b643839
create From PostgreSQL to SQLite in RailsaboutSQLite COLLATE NOCASE
context (empty) Case-insensitive comparisons via collations and stored virtual columns.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) b8b6c5b2-0aa4-4f75-bc00-d6986b732d0c
create From PostgreSQL to SQLite in RailsaboutCustom SQLite Functions in Ruby
context (empty) Demoed scalar and aggregate functions written in Ruby.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) f3f5db3d-8b65-4732-9495-f097a8ea5290
create From PostgreSQL to SQLite in RailsaboutSQLite Single-Writer Concurrency Trade-off
context (empty) Discussed in depth with migration-specific mitigations.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) bbe02f14-c324-4969-91c6-0d978b30495f
create From PostgreSQL to SQLite in RailsaboutSQLite Foreign Key Debugging
context (empty) Largest frustration of the migration; PRAGMA foreign_key_check workaround.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 661cca7a-8b69-43c3-b825-ece65d482719
create From PostgreSQL to SQLite in RailsaboutVertical Scaling Single Node
context (empty) Explains how SQLite scales on modern hardware.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 0229c9ec-a953-409e-b279-4196c373a7ff
create From PostgreSQL to SQLite in RailsaboutWrite-Ahead Logging (WAL) Mode
context (empty) WAL mode is the Rails default and underlies SQLite's concurrent reads.
relation (empty) about
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 1ee86e2d-95b9-499d-88fb-399006e36ec7
create From PostgreSQL to SQLite in Railsrelated_toHow (and why) to run SQLite in production
context (empty) Wrona explicitly credits Stephen Margheim's wroclove.rb 2024 talk as the inspiration for his migration.
relation (empty) related_to
source_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
target_node_id (empty) 143b49fe-b577-4590-9ad3-a5f5ce3bc5b3
create Wojtek WronarecommendsStephen Margheim
context (empty) Wrona repeatedly refers attendees to Margheim's presentations and blog posts on SQLite on Rails and querying JSON.
relation (empty) recommends
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) f8314bba-5263-4bd3-9174-6613ee5fef9e
create Wojtek WronarecommendsSQLite
context (empty) Wrona recommends SQLite as a viable production database for small-team Rails apps.
relation (empty) recommends
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) a65d4872-7d76-4774-a7d5-e29e615de75a
create Wojtek WronausesLitestream
context (empty) Production backup/replication of the SQLite DB to Cloudflare R2.
relation (empty) uses
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) c8b1820d-3884-4b11-aedc-e33d07ed1896
create Wojtek WronausesHatchbox
context (empty) Deploys the app to a Hetzner server via Hatchbox.
relation (empty) uses
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) ace2d786-db23-42f4-9d25-e0f4c3d4ae56
create Wojtek WronausesHetzner
context (empty) Runs production on a 16-vCPU Hetzner server.
relation (empty) uses
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) 7ee0b2f4-04cb-4990-857d-a50c5d9629eb
create Wojtek WronausesCloudflare R2
context (empty) Backup destination for Litestream and daily SQLite backup dumps.
relation (empty) uses
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) 0abf14da-8707-47ab-9d5b-77938f689470
create Wojtek WronausesSQLite
context (empty) Production database after migrating from Postgres.
relation (empty) uses
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) a65d4872-7d76-4774-a7d5-e29e615de75a
create Wojtek WronausesSolid Cache
context (empty) Adopted during the migration.
relation (empty) uses
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) 24d8b6b6-e8b0-45cc-936c-58dd26744522
create Wojtek WronausesSolid Queue
context (empty) Adopted during the migration.
relation (empty) uses
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) bc443bd9-cc27-4641-8b44-b26cbc448fde
create Wojtek Wronahas_skillRuby on Rails
attrs (empty) {"level" => "expert"}
context (empty) Backend developer building a Rails application.
relation (empty) has_skill
source_node_id (empty) b21300df-72e2-4e47-b917-1f882576077a
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create Adopt SQLite to cut Rails infrastructure cost and DevOps overheadfrom_talkFrom PostgreSQL to SQLite in Rails
context (empty) Top-level recommendation of the talk.
relation (empty) from_talk
source_node_id (empty) 76b317d9-fb45-40c0-9048-053349ec5f6d
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create Migrate schemas first, then datafrom_talkFrom PostgreSQL to SQLite in Rails
context (empty) Key methodological takeaway.
relation (empty) from_talk
source_node_id (empty) 188e6a10-9511-457d-b248-729ab60f34e4
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create Adopt SQLite to cut Rails infrastructure cost and DevOps overheadaboutSQLite
context (empty) Concrete recommendation about choosing SQLite.
relation (empty) about
source_node_id (empty) 76b317d9-fb45-40c0-9048-053349ec5f6d
target_node_id (empty) a65d4872-7d76-4774-a7d5-e29e615de75a
create Migrate schemas first, then dataaboutIncremental Migration Strategy
context (empty) Concrete guidance for staging the migration.
relation (empty) about
source_node_id (empty) 188e6a10-9511-457d-b248-729ab60f34e4
target_node_id (empty) 2734d9ab-a42a-4586-b652-618d7b643839
create How do you handle backups with SQLite?asked_atFrom PostgreSQL to SQLite in Rails
context (empty) Audience Q&A.
relation (empty) asked_at
source_node_id (empty) f22479b1-36e3-4338-bfd1-49959aaf7394
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create Why not use Solid Queue for heavy migrations?asked_atFrom PostgreSQL to SQLite in Rails
context (empty) Audience Q&A.
relation (empty) asked_at
source_node_id (empty) 507d2a4e-31d6-4f49-b0c4-380cf3f5f385
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create Why not just run a local Postgres instance?asked_atFrom PostgreSQL to SQLite in Rails
context (empty) Audience Q&A.
relation (empty) asked_at
source_node_id (empty) a4e8a3ad-9e31-4767-bc09-6b9518052d25
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create How long ago did you migrate and have you regretted it?asked_atFrom PostgreSQL to SQLite in Rails
context (empty) Audience Q&A.
relation (empty) asked_at
source_node_id (empty) 52410dd8-b0ec-4786-8a69-85d3e3b19212
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create Biggest table and total database size?asked_atFrom PostgreSQL to SQLite in Rails
context (empty) Audience Q&A.
relation (empty) asked_at
source_node_id (empty) 086e610e-1f70-410a-b6a5-8713bdec8bf6
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create Is Active Record N+1 still a problem on SQLite?asked_atFrom PostgreSQL to SQLite in Rails
context (empty) Audience Q&A.
relation (empty) asked_at
source_node_id (empty) 2304cd8c-b592-4641-869b-e87bcaf94761
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create How did you migrate existing data and what was the downtime?asked_atFrom PostgreSQL to SQLite in Rails
context (empty) Audience Q&A.
relation (empty) asked_at
source_node_id (empty) 101461ee-7222-4ee1-8c8b-712c1c310098
target_node_id (empty) 53dd81ef-913c-4b74-bb34-a411be3db308
create How do you handle backups with SQLite?aboutLitestream
context (empty) Primary backup mechanism discussed.
relation (empty) about
source_node_id (empty) f22479b1-36e3-4338-bfd1-49959aaf7394
target_node_id (empty) c8b1820d-3884-4b11-aedc-e33d07ed1896
create How do you handle backups with SQLite?aboutCloudflare R2
context (empty) Storage destination for the backups.
relation (empty) about
source_node_id (empty) f22479b1-36e3-4338-bfd1-49959aaf7394
target_node_id (empty) 0abf14da-8707-47ab-9d5b-77938f689470
create Why not use Solid Queue for heavy migrations?aboutSolid Queue
context (empty) Question concerns using Solid Queue for data migrations.
relation (empty) about
source_node_id (empty) 507d2a4e-31d6-4f49-b0c4-380cf3f5f385
target_node_id (empty) bc443bd9-cc27-4641-8b44-b26cbc448fde
create Why not just run a local Postgres instance?aboutPostgreSQL
context (empty) Compares running Postgres locally versus embedded SQLite.
relation (empty) about
source_node_id (empty) a4e8a3ad-9e31-4767-bc09-6b9518052d25
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create Is Active Record N+1 still a problem on SQLite?aboutN+1 Queries
context (empty) Question about whether SQLite removes the N+1 problem.
relation (empty) about
source_node_id (empty) 2304cd8c-b592-4641-869b-e87bcaf94761
target_node_id (empty) ee033151-443a-4285-aa68-fbc2e9755d06
create How did you migrate existing data and what was the downtime?aboutIncremental Migration Strategy
context (empty) Asked about the specific data migration step.
relation (empty) about
source_node_id (empty) 101461ee-7222-4ee1-8c8b-712c1c310098
target_node_id (empty) 2734d9ab-a42a-4586-b652-618d7b643839
create libSQLrelated_toTurso
context (empty) libSQL is an open-source fork maintained by Turso, which also runs a managed cloud service built on it.
relation (empty) related_to
source_node_id (empty) 7251100c-2f4d-42cc-9689-3bddb4d4d7b1
target_node_id (empty) d778467e-daea-4c6e-bf19-937f93071bde
create Litestreamrelated_toCloudflare R2
context (empty) Wrona's team uses R2 as the Litestream replication target because its pricing makes continuous streaming essentially ...
relation (empty) related_to
source_node_id (empty) c8b1820d-3884-4b11-aedc-e33d07ed1896
target_node_id (empty) 0abf14da-8707-47ab-9d5b-77938f689470
create Hatchboxrelated_toHetzner
context (empty) Wrona deploys his app to Hetzner via Hatchbox.
relation (empty) related_to
source_node_id (empty) ace2d786-db23-42f4-9d25-e0f4c3d4ae56
target_node_id (empty) 7ee0b2f4-04cb-4990-857d-a50c5d9629eb

Read set

135 nodes

concept Columnar Storage search_nodes takeaway Add enhanced-sqlite3-adapter for production SQLite on Rails search_nodes talk How (and why) to run SQLite in production search_nodes talk From PostgreSQL to SQLite in Rails search_nodes+get_node_edges question Is starting with SQLite a lock-in if I later need Postgres? search_nodes concept Develop in Production search_nodes takeaway Use Immediate Transactions for Rails search_nodes talk Building a Production-Ready AI App: MCP & OAuth on Rails search_nodes project Solid Cache search_nodes tool sqlite3-ruby search_nodes tool enhanced-sqlite3-adapter search_nodes tool SQLite search_nodes person Stephen Margheim search_nodes tool Litestream search_nodes concept Branch-Specific SQLite Databases search_nodes talk Fantastic Databases and Where to Find Them search_nodes concept Write-Ahead Logging (WAL) Mode search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2019 search_nodes talk It is not so bad, after all search_nodes talk Gregorian Calendar search_nodes event wroclove.rb 2018 search_nodes talk Performance Panel wroclove.rb 2024 search_nodes talk MVCC for Ruby developers search_nodes talk Scientific Ruby Lightning Talk search_nodes tool Speaker Deck search_nodes talk Building LLM powered applications in Ruby search_nodes person Adam Okoń search_nodes resource My Ruby Story search_nodes person Julik Tarkhanov search_nodes tool Hatchbox search_nodes concept GitHub Self-Hosted Runner search_nodes tool Honeycomb search_nodes company Hetzner search_nodes takeaway Buy Faster Hardware search_nodes tool GitHub Actions search_nodes takeaway Dockerize Exotic Dependencies search_nodes takeaway Sign serverlessforruby.org petition search_nodes tool CircleCI search_nodes tool Heroku search_nodes project Solid Queue search_nodes project Solid Cable search_nodes project AnyCable search_nodes project Nerds and Threads search_nodes tool Solidus search_nodes resource Rocket Real-Time Benchmark search_nodes concept AI Agent search_nodes project LiteCable search_nodes company Turso search_nodes tool CockroachDB search_nodes tool pganalyze search_nodes tool Sequel search_nodes resource serverlessforruby.org Petition search_nodes tool server-engine search_nodes talk Kamal is not harder than your PaaS search_nodes tool Traveling Ruby search_nodes tool Cloudflare Workers search_nodes tool Passenger search_nodes concept On-the-fly Processing search_nodes concept Function as a Service search_nodes company OVH search_nodes concept Direct Upload to Cloud search_nodes tool AWS Lambda search_nodes tool PostgreSQL search_nodes concept Vector Database search_nodes tool PgBouncer search_nodes concept Database Indexes search_nodes tool Citus search_nodes concept EXPLAIN / EXPLAIN ANALYZE search_nodes tool PgHero search_nodes concept Active Record search_nodes concept ActiveRecord Encryption search_nodes concept Domain Model (vs Active Record Model) search_nodes tool ROM search_nodes talk Better ActiveRecord IRB Output Gem Lightning Talk search_nodes tool Active Admin search_nodes tool activerecord-multi-tenant search_nodes tool Active Storage search_nodes tool Docker search_nodes takeaway Build your gem in a Docker container search_nodes tool Docker Compose search_nodes tool dry-container search_nodes concept Build Gems in Docker Isolation search_nodes tool Amazon ECS search_nodes question Isn't the dry-container recipe global state? search_nodes question Scaling Sidekiq Elastically search_nodes tool Kubernetes search_nodes takeaway Run Litestream from day one search_nodes tool LiteFS search_nodes question Isn't embedding the database in your app process a security regression? search_nodes company Cloudflare search_nodes company Transloadit search_nodes tool MinIO search_nodes tool CarrierWave search_nodes concept tus protocol search_nodes tool Apollo GraphQL Platform search_nodes tool Zencoder search_nodes tool Amazon CloudFront search_nodes tool Apollo GraphQL search_nodes person Wojtek Wrona search_nodes+get_node_edges company Planuj Wesele search_nodes takeaway Name Things To Find Their Properties search_nodes tool ChatGPT search_nodes concept xkcd Dependency / Nebraska Problem search_nodes tool left-pad search_nodes concept Retrieval Augmented Generation search_nodes tool Ruby on Rails search_nodes concept Cynefin Framework search_nodes event Rails World search_nodes project monolith framework search_nodes tool Ember.js search_nodes resource Woman on Rails search_nodes tool Rack search_nodes tool merb search_nodes takeaway Ruby as a Data Management Language search_nodes tool Discourse search_nodes concept N+1 Queries search_nodes question Aren't query optimizations a better first step than caching? search_nodes concept find_each vs each search_nodes talk LATERAL Joins Rails Performance Lightning Talk search_nodes concept destroy_all vs delete_all search_nodes concept Isolated Reader/Writer Connection Pools search_nodes tool graphql-preload search_nodes tool Redis search_nodes tool Apache HTTP Server search_nodes concept Connection Pool for Redis search_nodes question Sidekiq And Redis Cluster search_nodes concept Russian Doll Caching search_nodes concept Cache Preheating search_nodes tool graphql-ruby-fragment-cache search_nodes tool DBM / SDBM / GDBM search_nodes

2 edges