postgresql - 从 Postgresql 文件中进行 Redis 批量插入

标签 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

最佳答案

在 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

关于postgresql - 从 Postgresql 文件中进行 Redis 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46942583/

相关文章:

postgresql - Doctrine 的 DQL 没有正确生成查询

python - Django 迁移不适用于数据库

mongodb - 查询 MongoDB 比 Redis 快吗?

java - Redis Java 客户端 : Do I need to buffer my commands into a pipeline for performance?

sql - 有效内部连接请求中缺少 from 子句

带有 WHERE 子句的 SQL LIMIT

python - Psycopg2 无需手动打开 ssh 隧道即可访问远程主机上的 PostgreSQL 数据库

声明过期的 Redis 队列

java - 如何在 Spring Boot 中配置 Redis 缓存?

python - Redis:如果 python 不存在,则创建一个 ttl'd ('expires' ) 键?