When you’re spinning up a new YugabyteDB instance, it’s often useful to pre-load your database with schema definitions, seed data, or custom functions. With the yugabyted
CLI, you can automate this using the --initial_scripts_dir
flag.
The --initial_scripts_dir
flag lets you specify a directory containing SQL scripts that should be executed automatically when a new database is initialized. This is a great way to:
Set up your schema
Pre-populate tables with test data
Define stored procedures or functions
Just point yugabyted start
to your directory of .sql
files, then all .sql
files in the directory will be executed in alphanumeric order during cluster startup.
Example:
I have created the following .sql
scripts:
[root@cloud-server-0 test]# pwd
/root/test
[root@cloud-server-0 test]# ll
total 16
-rw-r--r--. 1 root root 19 May 30 21:40 a_create_database.sql
-rw-r--r--. 1 root root 29 May 30 21:41 b_create_schema.sql
-rw-r--r--. 1 root root 53 May 30 21:41 c_create_table.sql
-rw-r--r--. 1 root root 62 May 30 21:41 d_insert_data.sql
[root@cloud-server-0 test]# tail -n +1 *
==> a_create_database.sql <==
CREATE TABLE test;
==> b_create_schema.sql <==
\c test;
CREATE SCHEMA test;
==> c_create_table.sql <==
\c test;
CREATE TABLE test.test(c1 INT PRIMARY KEY);
==> d_insert_data.sql <==
\c test;
INSERT INTO test.test SELECT generate_series(1, 10);
I’ll spin up a new cluster with the .sql
scripts executed as part of the startup process:
[root@cloud-server-0 test]# yugabyted start --base_dir=~/yb01 --initial_scripts_dir=/root/test > ~/logs/start.log
[root@cloud-server-0 test]# ysqlsh -h $(hostname -I) -d test -c "SELECT * FROM test.test ORDER BY 1;"
c1
----
1
2
3
4
5
6
7
8
9
10
(10 rows)
test
database, schema, and table were automatically created as expected! Scripts are run only when a new database is initialized – not on every restart. This makes it perfect for local development, CI pipelines, or containerized environments where repeatable setup is key.
Have Fun!