Din ”source of truth” finns i Google Sheets… tills den inte gör det. En kolumn får ett nytt namn, någon klistrar in värden ovanpå formler, och nu är Postgres-tabellen du förlitar dig på i tysthet inte längre uppdaterad.
Det här problemet med Sheets Postgres-synk slår först mot RevOps och Marketing Ops, eftersom rapportering går sönder snabbt. Men grundare känner också av det när dashboards inte stämmer med det teamet ser i kalkylarket.
Det här n8n-flödet håller Google Sheets i linje med Postgres enligt ett schema. Du får se hur det jämför datamängder, lägger in nya rader och uppdaterar ändrade poster så att din databas förblir pålitlig.
Så fungerar den här automatiseringen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Google Sheets till Postgres, data hålls konsekvent
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/compare.svg' width='40' height='40' /></div><br/>Compare Datasets"]
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out Relevant Fields", pos: "b", h: 48 }
n3@{ icon: "mdi:database", form: "rounded", label: "Retrieve Sheets Data", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Select Rows in Postgres"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Insert Rows"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Update Rows"]
n1 --> n5
n1 --> n6
n0 --> n3
n0 --> n4
n3 --> n2
n4 --> n1
n2 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n3,n4,n5,n6 database
classDef customIcon fill:none,stroke:none
class n1,n4,n5,n6 customIcon
Problemet: ditt kalkylark och din databas glider isär
De flesta team börjar med ett kalkylark eftersom det går snabbt. Sedan växer verksamheten, Postgres introduceras för rapportering, produktdata eller integrationer, och plötsligt har du två kopior av samma sanning. Det stökiga är glappet mellan dem. CSV-exporter glöms bort, importer misslyckas för att en datumkolumn bytt format, och dubbletter smyger sig in för att ingen längre är säker på vad den ”unika nyckeln” är. Efter några veckor lägger du tid på att debattera siffror i stället för att använda dem.
Det eskalerar snabbt. Här är var det brukar fallera.
- Manuella exporter blir en återkommande uppgift som stjäl ungefär en timme varje vecka.
- Små formatändringar i Sheets kan göra att databas-inserts misslyckas, vilket du ofta märker först flera dagar senare.
- Uppdateringar sprids inte, så Postgres ser ”korrekt” ut men är inaktuellt.
- Team skapar engångsskript som ingen vill äga, så synken slutar i tysthet att fungera.
Lösningen: schemalagd Google Sheets → Postgres-synk
Det här flödet körs på ett tidsschema och gör en sak riktigt bra: det håller en Postgres-tabell i linje med det som just nu finns i Google Sheets. Först hämtar det de senaste posterna från ditt ark och hämtar de aktuella raderna från Postgres. Sedan plockar det ut nyckelfälten du bryr dig om (de som definierar identitet och ”vad som ändrades”). Därefter jämför det båda datamängderna och hittar två kategorier: rader som finns i Sheets men inte i Postgres (nya poster), och rader som finns i båda men som inte längre matchar (uppdaterade poster). Till sist lägger det in det som saknas och ändrar det som har ändrats, så att Postgres speglar arket utan ständig handpåläggning.
Flödet startar med en schematrigger. Google Sheets och Postgres frågas i parallell, resultaten jämförs, och flödet skickar ändringar till antingen ”insert” eller ”update”-åtgärder. När det är klart speglar din databas arkets aktuella tillstånd.
Det du får: automatisering vs. resultat
| Det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att ditt team uppdaterar en lead-tracker i Google Sheets och att du använder Postgres för att driva rapporter. Utan automatisering kan en veckovis export ta 20 minuter, plus ytterligare 40 minuter för att fixa felaktiga datum, dubbletter och misslyckade importer. Räkna med ungefär en timme, varje vecka, och det är när allt flyter på. Med det här flödet sätter du schemat en gång, låter det hämta båda datamängderna och Postgres uppdateras automatiskt. Din ”manuella tid” sjunker till en snabb kontroll då och då.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för den redigerbara källdatamängden.
- Postgres för att lagra och leverera konsekventa data.
- Google-inloggning (koppla via n8n:s Google Sheets-autentisering).
Kunskapsnivå: Nybörjare. Du kommer främst att mappa fält och bekräfta din unika nyckel för matchning av rader.
Vill du inte sätta upp detta själv? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett tidsschema drar igång allt. n8n kör det här flödet automatiskt, så din synk är inte beroende av att någon kommer ihåg den på fredagar.
Båda systemen hämtas i parallell. Google Sheets levererar de aktuella posterna i kalkylarket, och Postgres returnerar de aktuella raderna från måltabellen.
Nyckelfält plockas ut och jämförs. Flödet isolerar identifierare och relevanta kolumner, och jämför sedan datamängderna för att hitta vad som är nytt och vad som har ändrats.
Postgres uppdateras. Nya poster läggs in och befintliga ändras så att databasen speglar arket så nära som du behöver.
Du kan enkelt ändra enkelriktat Sheets → Postgres till att köra Postgres → Sheets i stället, eller göra det till en tvåvägssynk med vissa skyddsräcken. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera schematriggern
Ställ in arbetsflödet så att det körs enligt ett fast schema, så att det regelbundet kan synka data från Google Sheets till er databas.
- Lägg till och öppna Timed Schedule Start.
- I Rule ställer ni in intervallet till
hours(som visas i arbetsflödet). - Bekräfta att Timed Schedule Start är kopplad till både Fetch Sheet Records och Query Postgres Rows.
- Observera att Timed Schedule Start skickar utdata till både Fetch Sheet Records och Query Postgres Rows parallellt.
Steg 2: anslut Google Sheets
Hämta källdata från ert kalkylark.
- Öppna Fetch Sheet Records.
- Ställ in Document till
[YOUR_ID]och Sheet tillSheet1(gid=0). - Credential Required: Anslut era Google Sheets-uppgifter.
- Koppla Fetch Sheet Records till Extract Key Fields.
[YOUR_ID] lämnas oförändrat kommer arbetsflödet inte att hitta ert kalkylark.Steg 3: sätt upp dataförberedelse och jämförelse
Normalisera data från arket och jämför den med befintliga rader i databasen för att avgöra vilka poster som ska infogas och uppdateras.
- Öppna Extract Key Fields och ställ in Field to Split Out till
first_name, last_name, town, age. - Öppna Dataset Comparison och ställ in Resolve till
preferInput1. - I Merge By Fields säkerställer ni att field1 är
first_nameoch field2 ärfirst_name. - Bekräfta att Extract Key Fields är kopplad till Dataset Comparison input 0 och att Query Postgres Rows är kopplad till input 1.
first_name kan skapa konflikter om flera personer har samma förnamn. Överväg att lägga till last_name i merge-nycklarna vid behov.Steg 4: konfigurera databasens läs-/skrivoperationer
Fråga efter befintliga poster och infoga sedan nya rader samt uppdatera befintliga rader i er Postgres-tabell.
- Öppna Query Postgres Rows och ställ in Operation till
selectoch Return All tilltrue. - Ställ in Schema till
publicoch Table tilltestingi Query Postgres Rows. - Credential Required: Anslut era Postgres-uppgifter i Query Postgres Rows.
- Öppna Insert Database Rows och ställ in Schema till
publicoch Table tilltesting. - I Insert Database Rows behåller ni Columns-mappningen som auto-map av indata med
first_name,last_name,townochage. - Credential Required: Anslut era Postgres-uppgifter i Insert Database Rows.
- Öppna Modify Database Rows, ställ in Operation till
updateoch sätt kolumnvärdena till={{ $json.first_name }},={{ $json.last_name }},={{ $json.town }},={{ $json.age }}. - I Modify Database Rows ställer ni in Matching Columns till
first_nameochlast_name. - Credential Required: Anslut era Postgres-uppgifter i Modify Database Rows.
- Bekräfta att Dataset Comparison skickar utdata till Insert Database Rows och Modify Database Rows parallellt.
Steg 5: testa och aktivera ert arbetsflöde
Kör ett manuellt test för att verifiera full synk och aktivera sedan arbetsflödet för schemalagd körning.
- Klicka på Execute Workflow för att köra ett manuellt test.
- Verifiera att Fetch Sheet Records returnerar rader och att Query Postgres Rows hämtar befintliga poster från databasen.
- Bekräfta att Insert Database Rows lägger till nya poster och att Modify Database Rows uppdaterar matchningar baserat på
first_nameochlast_name. - När resultatet ser korrekt ut, växla arbetsflödet till Active för att aktivera schemalagda körningar.
Vanliga fallgropar
- Google Sheets-autentisering kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först det anslutna Google-kontot och delningsåtkomsten till kalkylarket.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om nedströmsnoder misslyckas på grund av tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera utdata för alltid.
Vanliga frågor
Cirka 30 minuter om ditt ark och din tabell redan är definierade.
Nej. Du kopplar konton och mappar de fält du vill hålla synkade.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in kostnader för hosting av Google Sheets och Postgres (ofta redan täckt).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, men var försiktig. Den här mallen är enkelriktad (Google Sheets in i Postgres), så för att göra den tvåvägs lägger du vanligtvis till en andra jämförelsegren åt andra hållet och bestämmer vilken sida som vinner vid konflikter. Många team lägger också till ett fält som ”last_updated” och låter den senaste ändringen vara källan. Om du inte definierar konfliktregler från början kan du råka skriva över bra data med gamla värden.
Oftast handlar det om behörigheter. Säkerställ att det anslutna Google-kontot kan komma åt arket och autentisera sedan om Google Sheets-autentiseringen i n8n om den har återkallats. Om kalkylarket flyttades till en delad enhet kan det också påverka åtkomsten. Kontrollera till sist att du läser rätt flik och intervall, eftersom ett tomt intervall kan se ut som en ”misslyckad” synk längre ned i flödet.
För de flesta småföretagsark (några tusen rader) kör den utan problem på n8n Cloud. Om du kör self-hosted beror den praktiska gränsen på din server och hur tungt jämförelsesteget är. Om ditt ark är stort, överväg att bara synka ändrade rader (till exempel genom att filtrera på en uppdaterad tidsstämpel) i stället för att hämta allt varje gång.
Ofta, ja. Jämförelse av datamängder och logik för ”insert vs. update” är där Zapier-liknande tvåstegsautomationer börjar kännas klumpiga, och det kan bli dyrt när volymerna växer. n8n ger dig också möjligheten att köra self-hosted, vilket är viktigt om du vill ha obegränsade körningar och mer kontroll över data. Samtidigt: om du bara behöver ett enkelt flöde som ”ny rad i Sheets → skapa rad i databasen” kan Zapier eller Make gå snabbare att sätta upp. Om du är osäker, prata med en automatiseringsexpert och få en rak rekommendation.
När detta väl rullar förblir ditt Sheet enkelt för människor, och Postgres förblir pålitligt för system. Ärligt talat är det den balansen de flesta team försöker hitta tillbaka till.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.