<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ara Israelyan</title>
    <description>The latest articles on DEV Community by Ara Israelyan (@juggle73).</description>
    <link>https://dev.to/juggle73</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3967821%2F45c8b19b-ab4a-4874-89da-58d8b5fc3437.jpg</url>
      <title>DEV Community: Ara Israelyan</title>
      <link>https://dev.to/juggle73</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juggle73"/>
    <language>en</language>
    <item>
      <title>Go/PostgreSQL helper. Less boilerplate, no ORM magic. Feedback welcome.</title>
      <dc:creator>Ara Israelyan</dc:creator>
      <pubDate>Thu, 04 Jun 2026 12:04:18 +0000</pubDate>
      <link>https://dev.to/juggle73/gopostgresql-helper-less-boilerplate-no-orm-magic-feedback-welcome-3d0f</link>
      <guid>https://dev.to/juggle73/gopostgresql-helper-less-boilerplate-no-orm-magic-feedback-welcome-3d0f</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/juggle73/less-boilerplate-than-raw-sql-less-magic-than-orm-generating-postgresql-queries-from-go-structs-1mhh" class="crayons-story__hidden-navigation-link"&gt;Less boilerplate than raw SQL, less magic than ORM: generating PostgreSQL queries from Go structs&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/juggle73" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3967821%2F45c8b19b-ab4a-4874-89da-58d8b5fc3437.jpg" alt="juggle73 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/juggle73" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ara Israelyan
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ara Israelyan
                
              
              &lt;div id="story-author-preview-content-3818273" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/juggle73" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3967821%2F45c8b19b-ab4a-4874-89da-58d8b5fc3437.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ara Israelyan&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/juggle73/less-boilerplate-than-raw-sql-less-magic-than-orm-generating-postgresql-queries-from-go-structs-1mhh" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 4&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/juggle73/less-boilerplate-than-raw-sql-less-magic-than-orm-generating-postgresql-queries-from-go-structs-1mhh" id="article-link-3818273"&gt;
          Less boilerplate than raw SQL, less magic than ORM: generating PostgreSQL queries from Go structs
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/go"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;go&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/postgres"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;postgres&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sql"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sql&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/juggle73/less-boilerplate-than-raw-sql-less-magic-than-orm-generating-postgresql-queries-from-go-structs-1mhh#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>database</category>
      <category>go</category>
      <category>postgres</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Less boilerplate than raw SQL, less magic than ORM: generating PostgreSQL queries from Go structs</title>
      <dc:creator>Ara Israelyan</dc:creator>
      <pubDate>Thu, 04 Jun 2026 09:36:13 +0000</pubDate>
      <link>https://dev.to/juggle73/less-boilerplate-than-raw-sql-less-magic-than-orm-generating-postgresql-queries-from-go-structs-1mhh</link>
      <guid>https://dev.to/juggle73/less-boilerplate-than-raw-sql-less-magic-than-orm-generating-postgresql-queries-from-go-structs-1mhh</guid>
      <description>&lt;p&gt;I like writing SQL manually in Go.&lt;/p&gt;

&lt;p&gt;Especially with pgx or database/sql, it gives you explicit control over what happens: no hidden queries, no entity tracking, no unexpected ORM behavior.&lt;/p&gt;

&lt;p&gt;But after writing enough services, the same boilerplate starts to repeat everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;column lists&lt;/li&gt;
&lt;li&gt;$1, $2, $3 placeholders&lt;/li&gt;
&lt;li&gt;INSERT / UPDATE field mapping&lt;/li&gt;
&lt;li&gt;scan pointers&lt;/li&gt;
&lt;li&gt;simple dynamic WHERE clauses&lt;/li&gt;
&lt;li&gt;small schema sync helpers for internal tools and MVPs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built norm.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/juggle73/norm" rel="noopener noreferrer"&gt;https://github.com/juggle73/norm&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://pkg.go.dev/github.com/juggle73/norm/v4" rel="noopener noreferrer"&gt;https://pkg.go.dev/github.com/juggle73/norm/v4&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What norm is
&lt;/h2&gt;

&lt;p&gt;norm is a lightweight PostgreSQL-focused SQL generation helper for Go structs.&lt;/p&gt;

&lt;p&gt;It is intentionally not an ORM.&lt;/p&gt;

&lt;p&gt;It does not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;execute queries&lt;/li&gt;
&lt;li&gt;manage connections&lt;/li&gt;
&lt;li&gt;track entities&lt;/li&gt;
&lt;li&gt;lazy-load relations&lt;/li&gt;
&lt;li&gt;hide SQL from you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It only generates SQL and args from Go structs, so you can still execute everything yourself with pgx, database/sql, or any other database layer.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;Keep raw SQL control, but remove repetitive SQL boilerplate.&lt;/p&gt;

&lt;p&gt;Small example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Id&lt;/span&gt;    &lt;span class="kt"&gt;int64&lt;/span&gt;  &lt;span class="n"&gt;norm&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"pk"&lt;/span&gt;
    &lt;span class="n"&gt;Name&lt;/span&gt;  &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;norm&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"notnull"&lt;/span&gt;
    &lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;orm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;norm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Exclude&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="n"&gt;norm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Returning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get generated SQL and args, then execute them yourself.&lt;/p&gt;

&lt;p&gt;Example generated SQL:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;INSERT INTO users (name, email)&lt;br&gt;
VALUES ($1, $2)&lt;br&gt;
RETURNING id&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why not just use raw SQL?
&lt;/h2&gt;

&lt;p&gt;Raw SQL is still the best choice for many Go projects.&lt;/p&gt;

&lt;p&gt;But this gets annoying:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QueryRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;`INSERT INTO users ( name, email, status, created_at, updated_at ) VALUES ($1, $2, $3, $4, $5) RETURNING id`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreatedAt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UpdatedAt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every time the struct changes, you have to update:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the column list&lt;/li&gt;
&lt;li&gt;the placeholder list&lt;/li&gt;
&lt;li&gt;the args list&lt;/li&gt;
&lt;li&gt;sometimes the scan list&lt;/li&gt;
&lt;li&gt;sometimes several SELECT / INSERT / UPDATE statements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;norm tries to remove that specific pain without taking ownership of your database access layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not use an ORM?
&lt;/h2&gt;

&lt;p&gt;ORMs are useful, but sometimes I do not want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hidden queries&lt;/li&gt;
&lt;li&gt;relationship magic&lt;/li&gt;
&lt;li&gt;hooks&lt;/li&gt;
&lt;li&gt;entity lifecycle&lt;/li&gt;
&lt;li&gt;implicit transactions&lt;/li&gt;
&lt;li&gt;complex abstractions around SQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In many backend services, I want SQL to remain visible and explicit.&lt;/p&gt;

&lt;p&gt;That is why norm does not try to replace GORM, Bun, Ent, or sqlc.&lt;/p&gt;

&lt;p&gt;It targets a smaller gap:&lt;/p&gt;

&lt;p&gt;More convenient than handwritten repetitive SQL, but much less abstract than a full ORM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not use sqlc?
&lt;/h2&gt;

&lt;p&gt;sqlc is excellent when you want to write SQL files and generate type-safe Go code.&lt;/p&gt;

&lt;p&gt;But sometimes I do not want a generation step.&lt;/p&gt;

&lt;p&gt;Sometimes I want small dynamic SQL fragments built from Go structs at runtime.&lt;/p&gt;

&lt;p&gt;Different tool, different trade-off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not use squirrel or goqu?
&lt;/h2&gt;

&lt;p&gt;Query builders are good for dynamic SQL.&lt;/p&gt;

&lt;p&gt;But they usually do not solve struct-driven boilerplate directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;struct fields to columns&lt;/li&gt;
&lt;li&gt;INSERT from struct&lt;/li&gt;
&lt;li&gt;UPDATE from struct&lt;/li&gt;
&lt;li&gt;scan pointers from struct&lt;/li&gt;
&lt;li&gt;schema diff helpers from struct tags&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the part norm focuses on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current features
&lt;/h2&gt;

&lt;p&gt;norm can generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SELECT queries&lt;/li&gt;
&lt;li&gt;INSERT queries&lt;/li&gt;
&lt;li&gt;UPDATE queries&lt;/li&gt;
&lt;li&gt;DELETE queries&lt;/li&gt;
&lt;li&gt;WHERE fragments&lt;/li&gt;
&lt;li&gt;field lists&lt;/li&gt;
&lt;li&gt;placeholders&lt;/li&gt;
&lt;li&gt;scan pointers&lt;/li&gt;
&lt;li&gt;JOIN helpers&lt;/li&gt;
&lt;li&gt;lightweight migration sync/diff helpers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It supports PostgreSQL-style placeholders and is designed to work well with pgx and database/sql.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example use case
&lt;/h2&gt;

&lt;p&gt;A typical use case is an internal backend service where you have structs like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Id&lt;/span&gt;        &lt;span class="kt"&gt;int64&lt;/span&gt;  &lt;span class="n"&gt;norm&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"pk"&lt;/span&gt;
    &lt;span class="n"&gt;Name&lt;/span&gt;      &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;norm&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"notnull"&lt;/span&gt;
    &lt;span class="n"&gt;Sku&lt;/span&gt;       &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;norm&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"unique"&lt;/span&gt;
    &lt;span class="n"&gt;Price&lt;/span&gt;     &lt;span class="kt"&gt;int64&lt;/span&gt;
    &lt;span class="n"&gt;CreatedAt&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want to keep SQL execution explicit, but you do not want to manually write the same column mapping logic for every CRUD operation.&lt;/p&gt;

&lt;p&gt;That is where norm helps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope
&lt;/h2&gt;

&lt;p&gt;The scope is intentionally limited.&lt;/p&gt;

&lt;p&gt;norm is not trying to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a full ORM&lt;/li&gt;
&lt;li&gt;a migration framework replacement&lt;/li&gt;
&lt;li&gt;a database abstraction layer&lt;/li&gt;
&lt;li&gt;a cross-database SQL dialect system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For now, it is PostgreSQL-focused and Go-focused.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback wanted
&lt;/h2&gt;

&lt;p&gt;I would appreciate honest technical feedback:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this API feel idiomatic for Go?&lt;/li&gt;
&lt;li&gt;Is the “not an ORM, just SQL generation” scope clear enough?&lt;/li&gt;
&lt;li&gt;What would make this unsafe or inconvenient in real PostgreSQL projects?&lt;/li&gt;
&lt;li&gt;Which feature would matter most: UPSERT, better joins, better migrations, or more examples?&lt;/li&gt;
&lt;li&gt;Would you use something like this with pgx?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/juggle73/norm" rel="noopener noreferrer"&gt;https://github.com/juggle73/norm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pkg.go.dev/github.com/juggle73/norm/v4" rel="noopener noreferrer"&gt;https://pkg.go.dev/github.com/juggle73/norm/v4&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>postgres</category>
      <category>sql</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
