Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

Postgres + Google Sheets: svar utan SQL-krångel

Rickard Andersson Partner, Nodenordic.se

Du ska inte behöva göra en miniutredning varje gång någon frågar: ”Kan du plocka fram siffrorna för det här?” Men det är precis vad som händer när svaret finns i Postgres och förfrågan kommer som luddig, vanlig svenska.

Marketing Ops märker det när kampanjrapportering blir en SQL-kö. En verksamhetsansvarig märker det när den ”snabba frågan” blir två dagar av fram-och-tillbaka. Och datadrivna analytiker hamnar som barnvakter för förfrågningar i stället för att analysera. Den här Postgres Sheets-automationen gör om frågor i naturligt språk till Postgres-resultat som du snabbt kan föra över till Google Sheets.

Du får se hur arbetsflödet genererar SQL på ett säkert sätt, kör den, formaterar utdata och returnerar något som teamet kan lita på och dela.

Så fungerar den här automationen

Se hur detta löser problemet:

n8n Workflow Template: Postgres + Google Sheets: svar utan SQL-krångel

Utmaningen: få svar från Postgres utan SQL-pingpong

De flesta ”enkla” rapportförfrågningar är egentligen inte enkla. Någon ber om ”registreringar per källa förra månaden”, men definitionerna är otydliga, tabellnamnen är okända och datan behöver en snabb upprensning innan den går att dela. Så du ställer följdfrågor, skriver en query, klistrar in resultat i ett kalkylark, inser att ett filter var fel och gör om. Under tiden väntar den som frågade, förtroendet sjunker och du börjar se flera kopior av ”final_report_v7” flyta runt.

Friktionen blir snabbt större. Här är var det brukar fallera i riktiga team.

  • En ”snabb pull” från Postgres blir en timme eftersom schemat bara finns i någons huvud (eller i en gammal dokumentation).
  • Att kopiera och klistra query-resultat till Google Sheets bjuder in små misstag som är svåra att upptäcka senare.
  • Folk börjar undvika databasen helt, så beslut tas på gamla exporter och magkänsla.
  • Analytiker blir en flaskhals, vilket gör att viktiga frågor ställs mer sällan.

Lösningen: frågor i naturligt språk som ger Postgres-färdiga resultat

Det här arbetsflödet tar emot en fråga i vanlig svenska, använder en AI-agent för att generera SQL och kör sedan den SQL:en mot din Postgres-databas för att returnera strukturerade resultat. Första gången du kör det läser det automatiskt in dina databastabeller och kolumner och sparar sedan schemat lokalt så att AI:n inte gissar tabellnamn. När en fråga sedan kommer in (från en chattrigger i n8n eller som en sub-workflow-trigger) laddar arbetsflödet schemat, blandar in det i AI-prompten och ber modellen skriva en query som matchar din förfrågan. Till sist kontrollerar det att queryn finns, säkerställer att SQL:en avslutas korrekt, kör den och formaterar utdata till ett svar som är enkelt att lägga in i Google Sheets.

Arbetsflödet börjar med en fråga och en sparad schema-snapshot. Därefter genererar AI:n SQL förankrad i din faktiska tabellstruktur. Postgres kör den, och du får ett svar som innehåller både SQL:en och resultaten.

Vad som förändras: före vs. efter

Praktisk effekt i verkligheten

Säg att du svarar på 10 datafrågor i veckan som landar i ett Google Sheet. Manuellt blir det ofta cirka 10 minuter för att reda ut frågan, cirka 20 minuter för att skriva och validera SQL och ytterligare 10 minuter för att formatera och klistra in i Sheets. Det är ungefär 40 minuter per fråga, eller runt 7 timmar i veckan. Med det här arbetsflödet skickar du in frågan en gång och får tillbaka SQL plus resultat på några minuter, så du hamnar närmare 1 timme av uppföljning i stället för en hel eftermiddag.

Krav

  • n8n-instans (testa n8n Cloud gratis)
  • Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
  • Postgres som databasen du vill fråga mot
  • Google Sheets för att dela resultat i ett välkänt format
  • LLM-åtkomst (Ollama lokalt, eller kompatibla inloggningsuppgifter för chattmodell)

Kunskapsnivå: Medel. Du bör vara bekväm med att koppla in credentials och bekräfta vilka databastabeller som är säkra att fråga mot.

Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).

Arbetsflödets gång

En fråga triggar körningen. Du kan starta det från n8n:s chattrigger, köra det manuellt eller anropa det som ett sub-workflow från en annan automation som redan fångat upp frågan.

Arbetsflödet laddar ditt databasschema. Vid första körningen hämtar det tabell- och kolumndetaljer från Postgres och skriver en schemafil lokalt. Vid senare körningar läser det den filen så att AI:n får verklig kontext och färre chanser att hallucinerar fältnamn.

En AI-agent skriver SQL utifrån förfrågan. Prompten slår ihop användarens fråga med det sparade schemat, och språkmodellen (ofta Ollama lokalt) genererar ett SQL-uttryck som ska besvara frågan.

Postgres kör och utdata paketeras. Arbetsflödet kontrollerar att queryn finns, rättar små formateringsmissar, kör den i Postgres och formaterar sedan resultaten till ett svar som kan skickas vidare till ett Google Sheets-steg (eller ett annat arbetsflöde) utan extra efterarbete.

Du kan enkelt justera vilka tabeller som är synliga för AI:n för att stärka integritet och minska brus. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementering

Steg 1: konfigurera den manuella triggern

Det här arbetsflödet kan startas manuellt för att bygga eller uppdatera den lokala schemafilen som används av AI-frågegeneratorn.

  1. Lägg till noden Manual Run Trigger för att starta flödet för schemaimport.
  2. Koppla Manual Run Trigger till Retrieve Table List enligt körflödet.
  3. Låt inställningarna för Manual Run Trigger vara standard (inga parametrar krävs).

Steg 2: anslut PostgreSQL och bygg schemafilen

Det här steget hämtar tabellnamn och kolumner, etiketterar dem, serialiserar datan och skriver den till en lokal JSON-fil för senare användning.

  1. Öppna Retrieve Table List och ställ in Query till SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='public'.
  2. Inloggningsuppgifter krävs: anslut era PostgreSQL-inloggningsuppgifter i Retrieve Table List.
  3. I Retrieve Table Columns ställer ni in Query till SELECT column_name, udt_name as data_type, CASE WHEN data_type = 'ARRAY' THEN TRUE ELSE FALSE END AS is_array, is_nullable FROM INFORMATION_SCHEMA.COLUMNS where table_name = '{{ $json.table_name }}'.
  4. Inloggningsuppgifter krävs: anslut era PostgreSQL-inloggningsuppgifter i Retrieve Table Columns.
  5. I Append Table Label säkerställer ni att tilldelningen för table är ={{ $('Retrieve Table List').item.json.table_name ?? 'emails_metadata'}} och låter Include Other Fields vara aktiverat.
  6. I Serialize Data File ställer ni in Operation till toJson.
  7. I Write File Local ställer ni in File Name till =/files/pgsql-{{ $workflow.id }}.json och Operation till write.
  8. Bekräfta att Write File Local går vidare till Manual Run Check för att villkora efterföljande flöden.
⚠️ Vanlig fallgrop: PostgreSQL-inloggningsuppgifter är inte konfigurerade i arbetsflödets JSON. Ni måste lägga till dem både i Retrieve Table List och Retrieve Table Columns (och senare Postgres Query Runner) innan ni kör.

Steg 3: konfigurera chat- och subworkflow-indata

Det här arbetsflödet kan styras av en chattprompt eller en subworkflow-indata. Båda vägarna läser den lokala schemafilen innan AI:n promptas.

  1. Lämna Chat Input Trigger som den är för att ta emot chattindata i arbetsflödet.
  2. Lämna Subworkflow Input Trigger som den är med Workflow Inputs satt till natural_language_query.
  3. Säkerställ att både Chat Input Trigger och Subworkflow Input Trigger är kopplade till Read Local Schema.
  4. I Read Local Schema ställer ni in File Selector till =/files/pgsql-{{ $workflow.id }}.json.
  5. Bekräfta att Schema File Check utvärderar {{ $input.item.binary }} och {{ $('Manual Run Check').isExecuted }} innan Parse File Data.
  6. I Parse File Data ställer ni in Operation till fromJson.
Om schemafilen inte finns ännu, trigga Manual Run Trigger en gång för att generera /files/pgsql-{{ $workflow.id }}.json.

Steg 4: sätt upp AI-generering av SQL

Det här steget slår ihop schemat och användarens prompt och använder sedan AI-agenten för att generera en SQL-fråga.

  1. I Merge Schema with Prompt säkerställer ni att följande fält tilldelas: sessionId till ={{ $('Chat Input Trigger').isExecuted && $('Chat Input Trigger').first().json.sessionId }}, action till ={{ $('Chat Input Trigger').isExecuted && $('Chat Input Trigger').first().json.action }}, chatinput till ={{ $('Subworkflow Input Trigger').isExecuted ? $('Subworkflow Input Trigger').first().json.natural_language_query: $('Chat Input Trigger').first().json.chatInput }}, och schema till ={{ $json.data }}.
  2. I SQL Generation Agent behåller ni prompten Text exakt som den är definierad, inklusive schemablocket och reglerna.
  3. Säkerställ att Ollama Language Model är ansluten som språkmodell för SQL Generation Agent.
  4. Ställ in Ollama Language Model Model till phi4-mini:latest.
Inloggningsuppgifter krävs: anslut era Ollama-inloggningsuppgifter i Ollama Language Model. AI-inloggningsuppgifterna måste läggas till i den överordnade noden Ollama Language Model, inte i SQL Generation Agent i sig.

Steg 5: validera SQL och kör frågan

Arbetsflödet extraherar SQL-satsen, säkerställer att den slutar med semikolon, validerar den och kör den mot PostgreSQL.

  1. I Pull SQL Statement ställer ni in query till ={{ ($json.output.match(/SELECT[^;]*/i) || [])[0] || "" }}.
  2. I Verify Semicolon End bekräftar ni att villkoren kontrollerar att {{ $json.query }} inte är tomt och inte slutar med ;.
  3. I Append Semicolon ställer ni in query till ={{ $json.query }};.
  4. I Validate Query Presence säkerställer ni att villkoret kontrollerar att {{ $json.query }} inte är tomt.
  5. Validate Query Presence skickar utdata parallellt till både Merge Results and Reply och Postgres Query Runner. Behåll det parallella flödet för att möjliggöra hantering av tomma frågor.
  6. I Postgres Query Runner ställer ni in Query till {{ $json.query }}.
  7. Inloggningsuppgifter krävs: anslut era PostgreSQL-inloggningsuppgifter i Postgres Query Runner.
Om AI:n returnerar felaktig SQL kommer Handle Empty Query ändå att få ett värde via falska grenen från Validate Query Presence.

Steg 6: formatera och slå ihop utdata

Frågeresultaten formateras till en läsbar sträng och slås sedan ihop med chattens svarflöde.

  1. I Format Query Output ställer ni in sqloutput till ={{ Object.keys($jmespath($input.all(),'[].json')[0]).join(' | ') }} {{ ($jmespath($input.all(),'[].json')).map(obj => Object.values(obj).join(' | ')).join('\n') }}.
  2. Verifiera att Format Query Output är kopplad till Merge Results and Reply.
  3. I Merge Results and Reply låter ni Mode vara satt till combine och Combine By till combineByPosition.
⚠️ Vanlig fallgrop: om er fråga inte returnerar några rader kan Format Query Output få tomma rubriker. Säkerställ att nedströms konsumenter hanterar tom sqloutput på ett robust sätt.

Steg 7: testa och aktivera ert arbetsflöde

Kör ett manuellt test och verifiera flödet för SQL-generering och exekvering innan ni aktiverar.

  1. Klicka på Execute Workflow för att köra Manual Run Trigger och skapa schemafilen.
  2. Trigga Chat Input Trigger med en testprompt (till exempel: ”senaste mejlen om budgetar”).
  3. Bekräfta att SQL Generation Agent matar ut en giltig SQL-sats och att Postgres Query Runner returnerar resultat.
  4. Verifiera att Merge Results and Reply tar emot både frågeresultaten och valideringsutdata.
  5. När ni är nöjda växlar ni arbetsflödet från Inactive till Active för att aktivera användning i produktion.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Saker att se upp med

  • Postgres-credentials kan gå ut eller peka mot fel databas. Om resultaten plötsligt ser ”tomma” ut, kontrollera först n8n:s Postgres-credential och databasnamnet.
  • Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om nedströms noder fallerar på tomma svar.
  • Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt annars kommer du redigera utdata för alltid.

Vanliga frågor

Hur snabbt kan jag implementera den här Postgres Sheets-automationen?

Oftast cirka 30 minuter om Postgres-åtkomsten redan är på plats.

Kan icke-tekniska team implementera den här Postgres Sheets-automationen?

Ja, men någon behöver fortfarande sätta upp Postgres-anslutningen och bestämma vilka tabeller som är tillåtna. Därefter är det mest att användare ställer frågor och kopierar resultat till Sheets.

Är n8n gratis att använda för det här arbetsflödet för Postgres Sheets-automation?

Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Molnplaner börjar på 20 USD/månad för högre volymer. Du behöver också räkna in modellkostnader (Ollama lokalt är vanligtvis ”gratis” förutom beräkning, medan hostade LLM-API:er tar betalt per användning).

Var kan jag hosta n8n för att köra den här automationen?

Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och klarar n8n bra. Self-hosting ger obegränsat antal körningar men kräver grundläggande serverhantering.

Hur anpassar jag den här Postgres Sheets-automationslösningen till mina specifika utmaningar?

Du kan begränsa schemat som AI:n ser genom att filtrera steget ”Retrieve Table List” så att det bara inkluderar tabellerna du vill ha (till exempel en enda rapporttabell). Om du vill ha annan utdataformatering för Google Sheets justerar du mappningen i ”Format Query Output” så att den returnerar kolumnrubriker och rader på det sätt ditt team förväntar sig. Vanliga justeringar är att tvinga datumintervall, lägga till standardfilter (som att exkludera testkonton) och byta namn på fält så att de matchar affärsvänliga etiketter.

Varför misslyckas min Postgres-anslutning i det här arbetsflödet?

För det mesta är det credentialen, inte queryn. Kontrollera Postgres-credentialen i n8n, bekräfta att hosten kan nås från din n8n-instans och verifiera att användaren har rättigheter att läsa tabellerna du frågar mot. Om det bara fallerar på vissa frågor kan den genererade SQL:en referera till en tabell eller kolumn som ändrats sedan schemafilen sparades, så kör schemautläsningen igen för att uppdatera den.

Vilken kapacitet har den här Postgres Sheets-automationslösningen?

Om du kör self-hosted finns ingen körningsgräns (det beror främst på din server och databasen). På n8n Cloud beror kapaciteten på din plans månatliga körningar, och det här arbetsflödet använder normalt en körning per fråga plus den initiala körningen för att bygga schemat.

Är den här Postgres Sheets-automationen bättre än att använda Zapier eller Make?

Ofta ja, eftersom det här inte bara är att ”flytta data från A till B”. Du genererar SQL, validerar den, hanterar schemakontext och returnerar både queryn och resultaten, vilket gör att förgreningslogik spelar roll. n8n är också praktiskt när du vill kunna self-hosta och ha tajtare kontroll över känslig data, särskilt om du kör Ollama lokalt. Zapier och Make kan fungera för enklare automationer, men de blir klumpiga när du behöver validering i flera steg, filhantering och villkorliga vägar i ett och samma flöde. Ärligt talat beror bästa verktyget på volym och hur strikta dina regler för dataåtkomst är. Prata med en automationsexpert om du vill ha en snabb rekommendation.

När detta väl är på plats slutar ”Kan du plocka fram det åt mig?” att vara ett avbrott och blir i stället ett repeterbart, delbart svar. Arbetsflödet tar hand om grovjobbet så att du kan fokusera på besluten.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Launch login modal Launch register modal