A seeder for adding and removing seeds from a Postgres database.
-
Clone pgseeder repo and cd into the created folder
git clone https://github.com/gigamono/pgseeder
cd pgseeder
-
Build the binary.
go build cmd/pgseeder.go
-
Add the binary to system path and run
pgseeder -h
command
-
Pgseeder expects
.sql
filenames to be ordered based on their dependency.The ordering format has to be a prefix and an integer.
For example:
01_users.sql
20210702_users.sql
-
You can use Pgseeder to create a timestamped
.sql
file.pgseeder --create "users"
This generates a timestamped
.sql
file similar to this:20210620150637_users.sql
ℹ️ Ordering allows Pgseeder to avoid foreign key constraint errors when adding or removing all seeds.
-
To add seeds from a
20210620150637_users.sql
file, you run following command:pgseeder -c "postgres://postgres@localhost:5432/resourcedb?sslmode=disable" --add users
The
-c
is needed to connect to the database. It takes postgres connection string. -
You can also run all the
.sql
files in the current directory with the--add-all
flagpgseeder -c "postgres://postgres@localhost:5432/resourcedb?sslmode=disable" --add-all
-
You can specify a directory where the
.sql
files live with-d
flagpgseeder -c "postgres://postgres@localhost:5432/resourcedb?sslmode=disable" --add-all -d "./seeds"
ℹ️ To support removing seeds later, Pgseeder expects the
.sql
filename to correspond to seeded table's name.
⚠ If multiple tables are seeded in a
.sql
file, Pgseeder will only recognise the one that matches the filename.
-
Here is how to remove seeds from
users
table.pgseeder -c "postgres://postgres@localhost:5432/resourcedb?sslmode=disable" --remove users
-
To remove all seeds.
pgseeder -c "postgres://postgres@localhost:5432/resourcedb?sslmode=disable" --remove-all
-
By default Pgseeder stores the
id
(if there is one) of the seed which it uses later to remove it. -
Sometimes the primary key is not
id
. You can specify the primary key with-k
flag.pgseeder -c "postgres://postgres@localhost:5432/resourcedb?sslmode=disable" --add users -k "user_id"
-
And to uniquely identify seeds using composite keys, you separate them by colons, commas or spaces.
pgseeder -c "postgres://postgres@localhost:5432/resourcedb?sslmode=disable" --add x_memberships -k "user_id, workspace_id"
-
Only supports
.sql
files. -
Does not support seeding multiple tables in a single
.sql
file.