Lyrebird · Realistic synthetic test databases, generated fully offline

PostgreSQL · Pagila

staff

Source rows
2
Synthetic rows
2
Broken foreign keys
0
Rows equal to a source row
0%

References: address_id → addressstore_id → store

Rows

Both databases, first rows by primary key, in one table: scrolling sideways moves them together. Rows at the same position are unrelated, unless the table holds kept reference data. Long values are cut at 60 characters.

staff_id keyfirst_namelast_nameaddress_idemailstore_idactiveusernamepasswordlast_updatepicture
Source database · 2 of 2 rows
1MikeHillyer3Mike.Hillyer@sakilastaff.com1trueMike8cb2237d0679ca88db6464eac60da963455139642022-05-16 15:13:11.793+00:00‹binary, 8 bytes›
2JonStephens4Jon.Stephens@sakilastaff.com2trueJon8cb2237d0679ca88db6464eac60da963455139642022-05-16 15:13:11.793+00:00NULL
Synthetic database · 2 of 2 rows
1HannahThomas181hannah.thomas492@cedarpost.test1trueZuvo3ad4608w6841iş49iş7325sox40iş511638806732022-05-16 15:13:11.793+00:00NULL
2EmmaHicks441emma.hicks315@bluefinch.example2trueRapa7ev8646d2722ev69iş5553mlb33iş953164797362022-05-16 15:13:11.793+00:00‹binary, 8 bytes›

Column by column

Each figure is computed from all rows of both databases in the same way. S is the source, Y the synthetic copy. Difference runs from 0 (same distribution) to 1 (no overlap): Kolmogorov-Smirnov for numbers and times, total variation for columns with few values. Personal columns are meant to differ, so they show how many values also appear in the source instead. Lyrebird draws names from built-in lists, not from the source, so common names can match.

Column Model read it as How it was generated Empty Distinct Range or length Most common Difference
staff_idinteger record key New key values S 0%
Y 0%
S 2
Y 2
S 1 → 2
Y 1 → 2
S 1 50% · 2 50%
Y 1 50% · 2 50%
—
first_nametext first namepersonal New text in the measured format S 0%
Y 0%
S 2
Y 2
S 3.5 chars avg
Y 5 chars avg
S Mike 50% · Jon 50%
Y Hannah 50% · Emma 50%
0% in source
last_nametext last namepersonal New text in the measured format S 0%
Y 0%
S 2
Y 2
S 7.5 chars avg
Y 5.5 chars avg
S Hillyer 50% · Stephens 50%
Y Thomas 50% · Hicks 50%
0% in source
address_idinteger record key Foreign key, from the measured relationship S 0%
Y 0%
S 2
Y 2
S 3 → 4
Y 181 → 441
S 3 50% · 4 50%
Y 181 50% · 441 50%
1 KS
emailtext emailpersonal New text in the measured format S 0%
Y 0%
S 2
Y 2
S 28 chars avg
Y 31 chars avg
S Mike.Hillyer@sakilastaff.com 50% · Jon.Stephens@sakilastaff.com 50%
Y hannah.thomas492@cedarpost.test 50% · emma.hicks315@bluefinch.example 50%
0% in source
store_idinteger record key Foreign key, from the measured relationship S 0%
Y 0%
S 2
Y 2
S 1 → 2
Y 1 → 2
S 1 50% · 2 50%
Y 1 50% · 2 50%
0 KS
activeboolean boolean flag Source values, at measured frequencies S 0%
Y 0%
S 1
Y 1
S 4 chars avg
Y 4 chars avg
S True 100%
Y True 100%
0 TVD
usernametext usernamepersonal New text in the measured format S 0%
Y 0%
S 2
Y 2
S 3.5 chars avg
Y 4 chars avg
S Mike 50% · Jon 50%
Y Zuvo 50% · Rapa 50%
0% in source
passwordtext user credential hashpersonal New text in the measured format S 0%
Y 0%
S 1
Y 2
S 40 chars avg
Y 40 chars avg
S 8cb2237d0679ca88db6464eac60da96345513964 100%
Y 3ad4608w6841iş49iş7325sox40iş51163880673 50% · 7ev8646d2722ev69iş5553mlb33iş95316479736 50%
0% in source
last_updatetimestamp with time zone lifecycle timestamp Times from the measured distribution S 0%
Y 0%
S 1
Y 1
S 2022-05-16 15:13:11.793+00:00 → 2022-05-16 15:13:11.793+00:00
Y 2022-05-16 15:13:11.793+00:00 → 2022-05-16 15:13:11.793+00:00
S 2022-05-16 15:13:11.793280+00:00 100%
Y 2022-05-16 15:13:11.793280+00:00 100%
0 KS
picturebytea structured datapersonal New binary values S 50%
Y 50%
S 1
Y 1
S 8 bytes avg
Y 8 bytes avg
S 8 100%
Y 8 100%
0 TVD