The LibPQ.load!(data, conn, query) function allows you to insert data from a collection (like a NamedTuple of arrays) into a table using a parameterized query. This is useful for batching rows efficiently.
Performance Tip: When performing many insertions, wrap your load! call in a transaction (BEGIN; and COMMIT;) to significantly increase performance by disabling autocommit.
using LibPQ
conn = LibPQ.Connection("dbname=postgres user=$DATABASE_USER")
execute(conn, """
CREATE TEMPORARY TABLE libpqjl_test (
no_nulls varchar(10) PRIMARY KEY,
yes_nulls varchar(10)
);
""")
# Efficiently loading data
LibPQ.load!(
(no_nulls = ["foo", "baz"], yes_nulls = ["bar", missing]),
conn,
"INSERT INTO libpqjl_test (no_nulls, yes_nulls) VALUES ($1, $2);",
)
# For high performance, use a transaction:
execute(conn, "BEGIN;")
LibPQ.load!(
(no_nulls = ["foo", "baz"], yes_nulls = ["bar", missing]),
conn,
"INSERT INTO libpqjl_test (no_nulls, yes_nulls) VALUES ($1, $2);",
)
execute(conn, "COMMIT;")
close(conn)