0

I tried:

ssh root@mytutumnode "docker exec -ti mydockercontainerid su postgres -c 'psql mydatabasename'" < mydump.sql

but it executes only

ssh root@mytutumnode "docker exec -ti mydockercontainerid su postgres -c 'psql mydatabasename'"

... and omits < mydump.sql part.

psql --list and alikes do work.

shredding
  • 5,374
  • 3
  • 46
  • 77
  • 2
    Possible duplicate of [Starting a Postgres container in Docker and then loading it with data](http://stackoverflow.com/questions/29600369/starting-a-postgres-container-in-docker-and-then-loading-it-with-data) – Mark O'Connor Nov 15 '15 at 17:07
  • Not really, i want to do it via shell, not via a container. – shredding Nov 19 '15 at 09:45

1 Answers1

0

Here's the Makefile i ended up using:

# Convenience cli shortcuts

LOCAL_DOCKER_IP = 192.168.99.100
STAGING_IP = DOCKER_NODE_IP_HERE
RELEASE_IP = IP_FROM_THE_SERVER_WITH_THE_ORIGINAL_DB

DOCKER_DB_ID = $(shell ssh root@$$STAGING_IP "docker ps | grep database" | awk '{print $$1}')


download_staging_db:
    psql -h $(LOCAL_DOCKER_IP) -p 5432 -U postgres -c 'drop database mydb'
    psql -h $(LOCAL_DOCKER_IP) -p 5432 -U postgres -c 'create database mydb'
    ssh root@$(STAGING_IP) "docker exec $(DOCKER_DB_ID) su postgres -c 'pg_dump mydb'" | psql -h $(LOCAL_DOCKER_IP) -p 5432 -U postgres mydb

upload_release_db_to_staging_db:
    ssh root@$(RELEASE_IP) "cd / && su postgres -c 'pg_dump my db'" > temp.sql
    scp temp.sql root@$(STAGING_IP):/temp.sql
    ssh root@$(STAGING_IP) "docker cp /temp.sql $(DOCKER_DB_ID):/temp.sql"
    ssh root@$(STAGING_IP) "docker exec $(DOCKER_DB_ID) su postgres -c 'drop database mydb'"
    ssh root@$(STAGING_IP) "docker exec $(DOCKER_DB_ID) su postgres -c 'create database mydb'"
    ssh root@$(STAGING_IP) "docker exec $(DOCKER_DB_ID) su postgres -c 'psql mydb < /temp.sql'"
    rm temp.sql
shredding
  • 5,374
  • 3
  • 46
  • 77