Postgresql文件中的Redis Mass Insertion

时间:2017-10-25 21:48:26

标签: postgresql redis

您好我正在尝试从Mysql迁移到Postgresql。 我有一个查询某些记录的SQL文件,我想把它放在带有大量插入的Redis中。

在Mysql中它正在这个示例命令下面工作;

sudo mysql -h $DB_HOST -u $DB_USERNAME -p$DB_PASSWORD $DB_DATABASE --skip-column-names --raw < test.sql | redis-cli --pipe

我找到了Postgresql语法的test.sql文件。

SELECT 
  '*3\r\n' ||
  '$' || length(redis_cmd::text) || '\r\n' || redis_cmd::text || '\r\n' ||
  '$' || length(redis_key::text) || '\r\n' || redis_key::text || '\r\n' ||
  '$' || length(sval::text) || '\r\n' || sval::text || '\r\n'
FROM (
  SELECT
  'SET' as redis_cmd,
  'ddi_lemmas:' || id::text AS redis_key,
  lemma AS sval
  FROM ddi_lemmas
) AS t

和它的一个输出如

"*3\r\n$3\r\nSET\r\n$11\r\nddi_lemmas:1\r\n$22\r\nabil+abil+neg+aor+pagr\r\n"

但我无法从命令行找到任何类似Mysql命令管道的例子。

有些示例有两个阶段没有直接(首先插入到txt文件然后将其放在Redis中)

sudo PGPASSWORD=$PASSWORD psql -U $USERNAME -h $HOSTNAME -d $DATABASE -f test.sql > data.txt

上面的命令工作,但是我不想要列名。

我试图直接将Postgresql结果的输出发送给Redis。

你能帮我吗?

解决方案:

如果我想从sql文件插入RESP命令。 (在@teppic的帮助下)

echo -e "$(psql -U $USERNAME -h $HOSTNAME -d $DATABASE -AEt -f test.sql)" | redis-cli --pipe

1 个答案:

答案 0 :(得分:1)

在psql手册页中,-t将“关闭列名称和结果行计数页脚的打印等”。

-A关闭对齐,-q设置“安静”模式。

看起来您正在输出RESP命令,在这种情况下,您必须使用转义字符串格式来获取换行符/回车对,例如E'*3\r\n'(请注意E)。

SET命令传递给redis-cli可能更简单:

psql -At -c "SELECT 'SET ddi_lemmas:' || id :: TEXT || ' ' || lemma FROM ddi_lemmas" | redis-cli