我希望能够生成bytea任意长度(<1Gb)的随机字段来填充测试数据。
这样做的最佳方法是什么?
我需要创建一些涉及层次结构的测试数据。我可以让它变得简单并做几个CROSS JOINs,但这会给我一个完全统一/没有任何变化的结构。这不仅看起来很乏味,而且测试数据缺乏变化有时会掩盖原本会发现的问题。所以,我想生成一个遵循以下规则的非统一层次结构:
WHILE循环可以很容易地做到这一点,但首选是找到一种基于集合的方法。一般而言,生成测试数据没有生产代码对效率的要求,但尝试基于集合的方法可能会更具教育意义,并有助于在未来找到基于集合的方法来解决问题。因此WHILE,不排除循环,但只有在不可能使用基于集合的方法时才能使用循环。我需要将一些随机值放入数据库,但我不想最终得到完全随机的文本(如 7hfg43d3)。相反,我想随机选择自己提供的值之一。
我可以在 DB 表 (PostgreSQL) 中创建具有默认值随机字符串的列,以及如何创建?
如果不可能,请告诉我。
我有一个表,其中包含进入其他表的几个键(其中每个键由多列组成)。我希望能够将具有相同键的行组合在一起,但我不想将所有行组合在一起。这不是一个简单GROUP BY的键,而是我希望能够分组说 10。所以如果一个特定的键出现 50 次,当我进行这个分组时我会得到 5 个结果(5 组,每组 10 个)。我还希望此分组在密钥内随机发生。
我不知道这样做的直接方法,而且我想出的迂回方法并没有像我认为的那样工作。我想出的迂回解决方案是为每个键创建一个新列,该列将是一个整数,以便值i表示该ith键的出现(但以随机顺序)。然后我可以进行整数除法,以便键中的每 n(比如 10)行具有相同的值,并且我可以GROUP BY对该值执行 a 。
有没有更直接的方法来完成我刚刚描述的事情?这很尴尬,我在创建新索引列时遇到了问题(正如我在这个问题中所描述的)。
编辑:首先请注意,这是针对 MySQL 的。如果我的目标不明确,我将添加一个示例。MySQL 文档显示了一种几乎可以到达的方法:
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');
SELECT * FROM animals ORDER BY grp,id;
Run Code Online (Sandbox Code Playgroud)
这将创建一个表,虽然不是我想要的,但它很接近:
+--------+----+---------+
| grp | id | name …Run Code Online (Sandbox Code Playgroud) 我们有一个数据库,每当我们从我们的服务收到订单时,我们就会将数据插入表中。
我们auto_increment用来生成 ID 并分配相同的订单。这通常在任何地方都是一样的。
但问题是,由于这些信息被传递给第三方供应商,他们能够追踪我们每天收到的订单数量。通过在清晨发送一个请求并在午夜发送另一个请求并计算ID.
这是提供有关我们服务的洞察信息。由于它是一个有点复杂的系统,我们不能做可以随机化它的复杂操作。
我最初的想法是以auto_increment位随机方式生成数字。
1,2,3,4,5,67,68,69,70,71,133,134,135,136,137,189,190,191,192,193,194
Run Code Online (Sandbox Code Playgroud)
我想这应该很简单,因为 Mysql 用完了缓存,通过附加一些随机数来生成下一个序列。
如何在不影响性能的情况下实现这一目标?
在下面的示例中,我有一个表foo,我想从中随机选择每组的一行。
CREATE TABLE foo (
line INT
);
INSERT INTO foo (line)
SELECT generate_series(0, 999, 1);
Run Code Online (Sandbox Code Playgroud)
假设我想按 分组line % 10。我可以这样做:
SELECT DISTINCT ON (bin) bin, line
FROM (
SELECT line, line % 10 AS bin, random() x
FROM foo
ORDER BY x
) X
Run Code Online (Sandbox Code Playgroud)
我想做的是多次从每个垃圾箱中随机选择。我原以为我能和做到这一点generate_series(),并LATERAL
SELECT i, line, bin
FROM
(
SELECT generate_series(1,3) i
) m,
LATERAL
(SELECT DISTINCT ON (bin) bin, line
FROM (
SELECT line, line % 10 bin, random() x …Run Code Online (Sandbox Code Playgroud) 我想使用 TABLESAMPLE 从 PostgreSQL 满足特定条件的行中随机采样。
这运行良好:
select * from customers tablesample bernoulli (1);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将条件嵌入脚本中。例如这个
select * from customers where last_name = 'powell' tablesample bernoulli (1);
Run Code Online (Sandbox Code Playgroud)
抛出这个错误:
SQL 错误 [42601]:错误:“tablesample”位置或附近的语法错误
:71
我在 Bash Shell 脚本中使用此代码来检索随机日期。
有没有办法在 Microsoft SQL Server 中做到这一点?
我可以想象,通过单个 SELECT 查询并可能通过调用一些可以轻松执行的函数,不知何故。
根据postgresql uuid-ossp文档uuid_generate_v1()是基于Mac地址+时间戳:
https://www.postgresql.org/docs/9.4/static/uuid-ossp.html
在分布式数据库场景中,我们有数百个数据库使用 UUID 键生成记录并同步回中央数据库。
假设我们检测到一台机器将来的日期/时间错误,我们将其改回正确的日期/时间。它可能会在此特定计算机上生成冲突的 UUID 密钥吗?
一种情况是夏令时/夏令时。