mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
43 lines
1.5 KiB
Markdown
43 lines
1.5 KiB
Markdown
# Run SQL Script Against Postgres Container
|
|
|
|
I've been using dockerized Postgres for local development with several projects
|
|
lately. This is typically with framework tooling (like Rails) where schema
|
|
migrations and query execution are handled by the tooling using the specified
|
|
connection parameters.
|
|
|
|
However, I was experimenting with and iterating on some Postgres functions
|
|
outside of any framework tooling. I needed a way to run the SQL script that
|
|
(re)creates the function via `psql` on the docker container.
|
|
|
|
With a local, non-containerized Postgres instance, I'd redirect the file to
|
|
`psql` like so:
|
|
|
|
```bash
|
|
$ psql -U postgres -d postgres < experimental-functions.sql
|
|
```
|
|
|
|
When I tried doing this with `docker exec` though, it was silently failing /
|
|
doing nothing. As far as I can tell, there was a mismatch with redirection
|
|
handling across the bounds of the container.
|
|
|
|
To get around this, I first copy the file into the `/tmp` directory on the
|
|
container:
|
|
|
|
```bash
|
|
$ docker cp experimental-functions.sql still-postgres-1:/tmp/experimental-functions.sql
|
|
```
|
|
|
|
Then the `psql` command that docker executes can be pointed directly at a
|
|
local-to-it SQL file.
|
|
|
|
```bash
|
|
$ docker exec still-postgres-1 psql \
|
|
-U postgres \
|
|
-d postgres \
|
|
-f /tmp/experimental-functions.sql
|
|
```
|
|
|
|
There are probably other ways to handle this, but I got into a nice rhythm with
|
|
this file full of `create or replace function ...` definitions where I could
|
|
modify, copy over, execute, run some SQL to verify, and repeat.
|