我有一个家庭作业问题,我不能这样做,所以我要求一些帮助。
家庭作业是构建一个脚本,通过ssh将数据库从本地sql发送到postgresql到虚拟机上。
#!/bin/bash
DATABASE=$1
mysqldump -u root -p'xxxxx' --compatible=postgresql $DATABASE > Migration.sql | ssh root@xxx.xxx.xx.x psql --username=postgres dump < Migration.sql
那是最接近我的。
当我检查某些内容是否发生了变化时,它会在postgresql中生成一些内容(至少构建一些数据库),但是在我执行脚本的终端中,它列出了一堆错误(看起来像是应该使用--compatible=postgresql
}许多语法错误"
或unlock
字来解决。
任何想法为什么似乎--compatible=postgresql
剂量似乎工作,因为脚本显示错误与这些兼容的错误,或者是否有更好/更清晰的方法来构建脚本。
很抱歉,如果这是一个奇怪或低级别的问题,仍在学习。
答案 0 :(得分:0)
首先,>
将命令的标准输出发送到文件。 |
将命令的标准输出发送到另一个命令。这些是互斥的,文件重定向“获胜”:
$ echo foo > foo.txt | cat
$ cat foo.txt
foo
所以管道毫无意义。
其次,您告诉psql
转储数据库,而不是导入它。摆脱dump
关键字,你至少应该更进一步。
第三,我对--compatible
标志仍然导致错误并不感到惊讶。首先,我认为没有任何单一格式的SQL可以与每个PostgreSQL版本兼容。我还期望它是一个“尽力而为”的旗帜,处理一些常见的已知破损,但并非所有可能的不兼容性。