我正在寻找一种在Postgres中重新排列字符串的方法。我需要使字符串不可识别,但它也必须是可逆的,这样哈希函数就消失了,随机生成的任何东西也是如此。另外,我正在使用10个字符长的字符串,因此我想将生成的重新排列的字符串保留在相同的范围内。这不是一个安全的字符串,只是为了保持某种形式可以立即识别。
我想根据...创建一些东西。
Select rearrange('12345abcde');
会产生这样的东西...
'1a2b3c4d5e'
重新排列功能不必完全相同,如果我的方向正确,我可以根据我的特定需求调整功能,但是长度可以变化,并且由于我需要能够颠倒程序,则需要使用非随机方法完成。
答案 0 :(得分:2)
示例功能
mysql> show index from event_tags_map;
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| event_tags_map | 0 | PRIMARY | 1 | eventId | A | 302032 | NULL | NULL | | BTREE | | |
| event_tags_map | 0 | PRIMARY | 2 | tagId | A | 604065 | NULL | NULL | | BTREE | | |
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.02 sec)
您可以使用2作为第二个参数来反转十个字符的字符串的转换:
create or replace function rearrange(str text, n int)
returns text language sql immutable as $$
select string_agg(item, '' order by (ord- 1) % n, ord)
from regexp_split_to_table(str, '') with ordinality as a(item, ord)
$$;
select rearrange('12345abcde', 5);
rearrange
------------
1a2b3c4d5e
(1 row)