[{"data":1,"prerenderedAt":113},["ShallowReactive",2],{"post-011-postgres-only-ru":3,"post-og-011-postgres-only":69},{"id":4,"title":5,"bars":6,"blurb":7,"body":8,"color":6,"contacts":6,"date":52,"dateModified":6,"description":53,"extension":54,"featured":55,"groups":6,"kicker":56,"meta":57,"metrics":6,"n":58,"navigation":59,"openTabs":6,"path":60,"progress":6,"readTime":61,"reading":6,"role":6,"rules":6,"running":6,"seo":62,"ships":6,"slug":63,"stack":6,"started":6,"status":6,"stem":64,"streak":6,"tag":65,"tagColor":67,"tagline":6,"tasks":6,"timeline":6,"topics":6,"week":6,"year":6,"__hash__":68},"ru\u002Fwriting\u002F011-postgres-only.md","Странные радости бэкенда только на postgres",null,"Что происходит, если пять лет отказываться добавлять вторую базу.",{"type":9,"value":10,"toc":46},"minimark",[11,15,19,24,27,43],[12,13,14],"p",{},"№ 011 · 06 мар '26 · 6 мин · стек",[16,17,5],"h2",{"id":18},"странные-радости-бэкенда-только-на-postgres",[12,20,21],{},[22,23,7],"em",{},[25,26],"hr",{},[12,28,29,30,34,35,38,39,42],{},"правило простое: если postgres умеет — делаем в postgres. очередь задач? ",[31,32,33],"code",{},"SELECT ... FOR UPDATE SKIP LOCKED",". полнотекстовый поиск? ",[31,36,37],{},"tsvector",". векторный поиск? ",[31,40,41],{},"pg_vector",". кэширование? материализованные вьюхи и крон. фиче-флаги? таблица.",[12,44,45],{},"звучит аскетично. так и есть. а ещё это пять лет, в которые меньше движущихся частей, одна история про бэкапы, один дашборд мониторинга, одна ментальная модель. в день, когда придётся добавить redis, я напишу по этому поводу грустную заметку. этот день ещё не наступил.",{"title":47,"searchDepth":48,"depth":49,"links":50},"",2,3,[51],{"id":18,"depth":48,"text":5},"2026-03-06","Странные радости бэкенда только на postgres — что происходит, если пять лет отказываться добавлять вторую базу.","md",false,"стек",{},"011",true,"\u002Fwriting\u002F011-postgres-only","6 мин",{"title":5,"description":53},"011-postgres-only","writing\u002F011-postgres-only",{"label":66,"color":67},"техническое","var(--green)","rDdWRSu_UEm7uBwD9-j5OMpa1Voasp_45fWBKqoF7mg",{"id":70,"title":71,"bars":6,"blurb":72,"body":73,"color":6,"contacts":6,"date":52,"dateModified":6,"description":105,"extension":54,"featured":55,"groups":6,"kicker":106,"meta":107,"metrics":6,"n":58,"navigation":59,"openTabs":6,"path":60,"progress":6,"readTime":108,"reading":6,"role":6,"rules":6,"running":6,"seo":109,"ships":6,"slug":63,"stack":6,"started":6,"status":6,"stem":64,"streak":6,"tag":110,"tagColor":67,"tagline":6,"tasks":6,"timeline":6,"topics":6,"week":6,"year":6,"__hash__":112},"en\u002Fwriting\u002F011-postgres-only.md","The weird joys of a postgres-only backend","What happens when you refuse to add a second database for five years.",{"type":9,"value":74,"toc":102},[75,78,81,85,87,99],[12,76,77],{},"№ 011 · mar 06 '26 · 6 min · stack",[16,79,71],{"id":80},"the-weird-joys-of-a-postgres-only-backend",[12,82,83],{},[22,84,72],{},[25,86],{},[12,88,89,90,92,93,95,96,98],{},"the rule is simple: if postgres can do it, postgres does it. jobs queue? ",[31,91,33],{},". full-text search? ",[31,94,37],{},". vector search? ",[31,97,41],{},". caching? materialised views and a cron. feature flags? a table.",[12,100,101],{},"it sounds austere. it is. it's also five years of fewer moving parts, one backup story, one monitoring dashboard, one mental model. the day i have to add redis, i'll write a sad notebook about it. that day hasn't arrived.",{"title":47,"searchDepth":48,"depth":49,"links":103},[104],{"id":80,"depth":48,"text":71},"The weird joys of a postgres-only backend — what happens when you refuse to add a second database for five years.","stack",{},"6 min",{"title":71,"description":105},{"label":111,"color":67},"technical","ioFpcUHUP-H3rf1rNmQLtGPmDcC7-QDARw3pxQ7o0mU",1777071044162]