GO pg prevent default value

Issue

Struct sample

type Car struct {
    ID              uint64
    Required        bool                   `pg:"required,notnull"`
    Name            string                 `pg:"name"`
    }

Migration:

BEGIN;

ALTER TABLE cars ADD COLUMN required BOOLEAN NOT NULL DEFAULT true;

END;

When I create car struct:

car = Car{Name:"Name",Required:false}

When i’m trying to add some new car by writing:

_, err = r.db.Model(&car).Insert()

SQL Query looks like this:

INSERT INTO "cars" ("id", "name", "required") VALUES (DEFAULT, "Name", DEFAULT)

The main problem that car has required field set as false, but when I inserting it – it changes to DEFAULT (true).

Solution

Because the value false will be read as a null value. Because null value your data will be change to the default value (TRUE)

You must change the struct to like this

type Car struct {
    ID       uint64
    Required *bool  `pg:"required,notnull,default:true"`
    Name     string `pg:"name"`
}

and define struct like this

required := false
car = Car{Name:"Name", Required: &required}

or you can also use data type sql.NullBool in your struct

type Car struct {
    ID       uint64
    Required sql.NullBool  `pg:"required,notnull,default:true"`
    Name     string `pg:"name"`
}

car = Car{Name:"Name", Required: sql.NullBool{Bool: false, Valid: true}}

Answered By – Abdul Hamid

Answer Checked By – Terry (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.