diff --git a/README.md b/README.md index 23cb11d..f20660b 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ And something like this: ``` CREATE EXTENSION jsonbd; -CREATE TABLE t(a JSONB COMPRESSED jsonbd); +CREATE TABLE t(a JSONB COMPRESSION jsonbd); ``` This extension is in development and not finished yet. diff --git a/bench/.gitignore b/bench/.gitignore new file mode 100644 index 0000000..742d449 --- /dev/null +++ b/bench/.gitignore @@ -0,0 +1 @@ +/football.json diff --git a/bench/bench.py b/bench/bench.py new file mode 100755 index 0000000..6f33267 --- /dev/null +++ b/bench/bench.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +import asyncio +import contextlib +import glob +import json +import os + +from testgres import get_new_node + +sources = [ + ('football', './football.json'), +] + +conf = ''' +shared_preload_libraries='jsonbd' +''' + + +@contextlib.contextmanager +def cwd(path): + print("cwd: ", path) + curdir = os.getcwd() + os.chdir(path) + + try: + yield + finally: + print("cwd:", curdir) + os.chdir(curdir) + + +async def insert_data(node, files, table_name, table_name_c): + sql = 'insert into {} values ($1)' + sql1 = sql.format(table_name) + sql2 = sql.format(table_name_c) + + async with node.connect() as con: + while True: + try: + filename = files.pop() + except IndexError: + break + + print(filename) + + with open(filename, 'r') as f: + data = json.load(f) + + if isinstance(data, dict): + if 'rounds' in data: + for obj in data['rounds']: + await con.execute(sql1, json.dumps(obj)) + await con.execute(sql2, json.dumps(obj)) + + +def main(loop): + with get_new_node('node1') as node: + node.init() + node.append_conf('postgresql.conf', conf) + node.start() + + node.safe_psql('postgres', 'create extension jsonbd') + + for name, root_dir in sources: + table_name = name + table_name_c = '%s_c' % name + + node.safe_psql('postgres', 'create table %s(a jsonb)' % table_name) + node.safe_psql('postgres', 'create table %s(a jsonb compression jsonbd)' % table_name_c) + node.safe_psql('postgres', 'alter table %s alter column a set storage external' % table_name) + + with cwd(os.path.abspath(root_dir)): + files = [] + for filename in glob.iglob('**/*.json', recursive=True): + if filename == 'package.json': + continue + + files.append(filename) + + print(len(files)) + coroutines = [insert_data(node, files, table_name, table_name_c) + for i in range(4)] + loop.run_until_complete(asyncio.gather(*coroutines)) + + print(node.safe_psql('postgres', "select pg_size_pretty(pg_total_relation_size('%s'))" % table_name)) + print(node.safe_psql('postgres', "select pg_size_pretty(pg_total_relation_size('%s'))" % table_name_c)) + + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + main(loop) + loop.close() diff --git a/expected/basic.out b/expected/basic.out index dfcb800..ed23a98 100644 --- a/expected/basic.out +++ b/expected/basic.out @@ -1,17 +1,17 @@ CREATE SCHEMA comp; CREATE EXTENSION jsonbd SCHEMA comp; -CREATE COMPRESSION METHOD cm1 HANDLER comp.jsonbd_compression_handler; -CREATE TABLE comp.t(a JSONB COMPRESSED cm1); +CREATE TABLE comp.t(a SERIAL, b JSONB COMPRESSION jsonbd); \d+ comp.t; - Table "comp.t" - Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description ---------+-------+-----------+----------+---------+----------+-------------+--------------+------------- - a | jsonb | | | | extended | cm1 | | + Table "comp.t" + Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description +--------+---------+-----------+----------+-----------------------------------+----------+-------------+--------------+------------- + a | integer | | not null | nextval('comp.t_a_seq'::regclass) | plain | | | + b | jsonb | | | | extended | jsonbd | | CREATE OR REPLACE FUNCTION comp.add_record() RETURNS VOID AS $$ BEGIN - INSERT INTO comp.t + INSERT INTO comp.t(b) SELECT jsonb_object(array_agg(array[repeat(letter, count), count::text])) FROM ( SELECT chr(i) AS letter, b AS count @@ -40,26 +40,24 @@ SELECT comp.add_record(); (1 row) -SELECT * FROM comp.t; - a ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "yyyyyyyyyyyyyy": "14", "zzzzzzzzzzzzzz": "14", "aaaaaaaaaaaaaaa": "15", "bbbbbbbbbbbbbbb": "15", "ccccccccccccccc": "15", "ddddddddddddddd": "15", "eeeeeeeeeeeeeee": "15", "fffffffffffffff": "15", "ggggggggggggggg": "15", "hhhhhhhhhhhhhhh": "15", "iiiiiiiiiiiiiii": "15", "jjjjjjjjjjjjjjj": "15", "kkkkkkkkkkkkkkk": "15", "lllllllllllllll": "15", "mmmmmmmmmmmmmmm": "15", "nnnnnnnnnnnnnnn": "15", "ooooooooooooooo": "15", "ppppppppppppppp": "15", "qqqqqqqqqqqqqqq": "15", "rrrrrrrrrrrrrrr": "15", "sssssssssssssss": "15", "ttttttttttttttt": "15", "uuuuuuuuuuuuuuu": "15", "vvvvvvvvvvvvvvv": "15", "wwwwwwwwwwwwwww": "15", "xxxxxxxxxxxxxxx": "15", "yyyyyyyyyyyyyyy": "15", "zzzzzzzzzzzzzzz": "15", "aaaaaaaaaaaaaaaa": "16", "bbbbbbbbbbbbbbbb": "16", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19", "vvvvvvvvvvvvvvvvvvv": "19", "wwwwwwwwwwwwwwwwwww": "19", "xxxxxxxxxxxxxxxxxxx": "19", "yyyyyyyyyyyyyyyyyyy": "19", "zzzzzzzzzzzzzzzzzzz": "19", "aaaaaaaaaaaaaaaaaaaa": "20", "bbbbbbbbbbbbbbbbbbbb": "20", "cccccccccccccccccccc": "20", "dddddddddddddddddddd": "20", "eeeeeeeeeeeeeeeeeeee": "20", "ffffffffffffffffffff": "20", "gggggggggggggggggggg": "20", "hhhhhhhhhhhhhhhhhhhh": "20", "iiiiiiiiiiiiiiiiiiii": "20", "jjjjjjjjjjjjjjjjjjjj": "20", "kkkkkkkkkkkkkkkkkkkk": "20", "llllllllllllllllllll": "20", "mmmmmmmmmmmmmmmmmmmm": "20", "nnnnnnnnnnnnnnnnnnnn": "20", "oooooooooooooooooooo": "20", "pppppppppppppppppppp": "20", "qqqqqqqqqqqqqqqqqqqq": "20", "rrrrrrrrrrrrrrrrrrrr": "20", "ssssssssssssssssssss": "20", "tttttttttttttttttttt": "20", "uuuuuuuuuuuuuuuuuuuu": "20", "vvvvvvvvvvvvvvvvvvvv": "20", "wwwwwwwwwwwwwwwwwwww": "20", "xxxxxxxxxxxxxxxxxxxx": "20", "yyyyyyyyyyyyyyyyyyyy": "20", "zzzzzzzzzzzzzzzzzzzz": "20"} - {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "yyyyyyyyyyyyyy": "14", "zzzzzzzzzzzzzz": "14", "aaaaaaaaaaaaaaa": "15", "bbbbbbbbbbbbbbb": "15", "ccccccccccccccc": "15", "ddddddddddddddd": "15", "eeeeeeeeeeeeeee": "15", "fffffffffffffff": "15", "ggggggggggggggg": "15", "hhhhhhhhhhhhhhh": "15", "iiiiiiiiiiiiiii": "15", "jjjjjjjjjjjjjjj": "15", "kkkkkkkkkkkkkkk": "15", "lllllllllllllll": "15", "mmmmmmmmmmmmmmm": "15", "nnnnnnnnnnnnnnn": "15", "ooooooooooooooo": "15", "ppppppppppppppp": "15", "qqqqqqqqqqqqqqq": "15", "rrrrrrrrrrrrrrr": "15", "sssssssssssssss": "15", "ttttttttttttttt": "15", "uuuuuuuuuuuuuuu": "15", "vvvvvvvvvvvvvvv": "15", "wwwwwwwwwwwwwww": "15", "xxxxxxxxxxxxxxx": "15", "yyyyyyyyyyyyyyy": "15", "zzzzzzzzzzzzzzz": "15", "aaaaaaaaaaaaaaaa": "16", "bbbbbbbbbbbbbbbb": "16", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19", "vvvvvvvvvvvvvvvvvvv": "19", "wwwwwwwwwwwwwwwwwww": "19", "xxxxxxxxxxxxxxxxxxx": "19", "yyyyyyyyyyyyyyyyyyy": "19", "zzzzzzzzzzzzzzzzzzz": "19", "aaaaaaaaaaaaaaaaaaaa": "20", "bbbbbbbbbbbbbbbbbbbb": "20", "cccccccccccccccccccc": "20", "dddddddddddddddddddd": "20", "eeeeeeeeeeeeeeeeeeee": "20", "ffffffffffffffffffff": "20", "gggggggggggggggggggg": "20", "hhhhhhhhhhhhhhhhhhhh": "20", "iiiiiiiiiiiiiiiiiiii": "20", "jjjjjjjjjjjjjjjjjjjj": "20", "kkkkkkkkkkkkkkkkkkkk": "20", "llllllllllllllllllll": "20", "mmmmmmmmmmmmmmmmmmmm": "20", "nnnnnnnnnnnnnnnnnnnn": "20", "oooooooooooooooooooo": "20", "pppppppppppppppppppp": "20", "qqqqqqqqqqqqqqqqqqqq": "20", "rrrrrrrrrrrrrrrrrrrr": "20", "ssssssssssssssssssss": "20", "tttttttttttttttttttt": "20", "uuuuuuuuuuuuuuuuuuuu": "20", "vvvvvvvvvvvvvvvvvvvv": "20", "wwwwwwwwwwwwwwwwwwww": "20", "xxxxxxxxxxxxxxxxxxxx": "20", "yyyyyyyyyyyyyyyyyyyy": "20", "zzzzzzzzzzzzzzzzzzzz": "20"} - {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "yyyyyyyyyyyyyy": "14", "zzzzzzzzzzzzzz": "14", "aaaaaaaaaaaaaaa": "15", "bbbbbbbbbbbbbbb": "15", "ccccccccccccccc": "15", "ddddddddddddddd": "15", "eeeeeeeeeeeeeee": "15", "fffffffffffffff": "15", "ggggggggggggggg": "15", "hhhhhhhhhhhhhhh": "15", "iiiiiiiiiiiiiii": "15", "jjjjjjjjjjjjjjj": "15", "kkkkkkkkkkkkkkk": "15", "lllllllllllllll": "15", "mmmmmmmmmmmmmmm": "15", "nnnnnnnnnnnnnnn": "15", "ooooooooooooooo": "15", "ppppppppppppppp": "15", "qqqqqqqqqqqqqqq": "15", "rrrrrrrrrrrrrrr": "15", "sssssssssssssss": "15", "ttttttttttttttt": "15", "uuuuuuuuuuuuuuu": "15", "vvvvvvvvvvvvvvv": "15", "wwwwwwwwwwwwwww": "15", "xxxxxxxxxxxxxxx": "15", "yyyyyyyyyyyyyyy": "15", "zzzzzzzzzzzzzzz": "15", "aaaaaaaaaaaaaaaa": "16", "bbbbbbbbbbbbbbbb": "16", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19", "vvvvvvvvvvvvvvvvvvv": "19", "wwwwwwwwwwwwwwwwwww": "19", "xxxxxxxxxxxxxxxxxxx": "19", "yyyyyyyyyyyyyyyyyyy": "19", "zzzzzzzzzzzzzzzzzzz": "19", "aaaaaaaaaaaaaaaaaaaa": "20", "bbbbbbbbbbbbbbbbbbbb": "20", "cccccccccccccccccccc": "20", "dddddddddddddddddddd": "20", "eeeeeeeeeeeeeeeeeeee": "20", "ffffffffffffffffffff": "20", "gggggggggggggggggggg": "20", "hhhhhhhhhhhhhhhhhhhh": "20", "iiiiiiiiiiiiiiiiiiii": "20", "jjjjjjjjjjjjjjjjjjjj": "20", "kkkkkkkkkkkkkkkkkkkk": "20", "llllllllllllllllllll": "20", "mmmmmmmmmmmmmmmmmmmm": "20", "nnnnnnnnnnnnnnnnnnnn": "20", "oooooooooooooooooooo": "20", "pppppppppppppppppppp": "20", "qqqqqqqqqqqqqqqqqqqq": "20", "rrrrrrrrrrrrrrrrrrrr": "20", "ssssssssssssssssssss": "20", "tttttttttttttttttttt": "20", "uuuuuuuuuuuuuuuuuuuu": "20", "vvvvvvvvvvvvvvvvvvvv": "20", "wwwwwwwwwwwwwwwwwwww": "20", "xxxxxxxxxxxxxxxxxxxx": "20", "yyyyyyyyyyyyyyyyyyyy": "20", "zzzzzzzzzzzzzzzzzzzz": "20"} +SELECT * FROM comp.t ORDER BY a; + a | b +---+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1 | {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "vvvvvvvvvvvvvvvvvvv": "19", "yyyyyyyyyyyyyy": "14", "wwwwwwwwwwwwwwwwwww": "19", "zzzzzzzzzzzzzz": "14", "xxxxxxxxxxxxxxxxxxx": "19", "aaaaaaaaaaaaaaa": "15", "yyyyyyyyyyyyyyyyyyy": "19", "bbbbbbbbbbbbbbb": "15", "zzzzzzzzzzzzzzzzzzz": "19", "ccccccccccccccc": "15", "aaaaaaaaaaaaaaaaaaaa": "20", "ddddddddddddddd": "15", "bbbbbbbbbbbbbbbbbbbb": "20", "eeeeeeeeeeeeeee": "15", "cccccccccccccccccccc": "20", "fffffffffffffff": "15", "dddddddddddddddddddd": "20", "ggggggggggggggg": "15", "eeeeeeeeeeeeeeeeeeee": "20", "hhhhhhhhhhhhhhh": "15", "ffffffffffffffffffff": "20", "iiiiiiiiiiiiiii": "15", "gggggggggggggggggggg": "20", "jjjjjjjjjjjjjjj": "15", "hhhhhhhhhhhhhhhhhhhh": "20", "kkkkkkkkkkkkkkk": "15", "iiiiiiiiiiiiiiiiiiii": "20", "lllllllllllllll": "15", "jjjjjjjjjjjjjjjjjjjj": "20", "mmmmmmmmmmmmmmm": "15", "kkkkkkkkkkkkkkkkkkkk": "20", "nnnnnnnnnnnnnnn": "15", "llllllllllllllllllll": "20", "ooooooooooooooo": "15", "mmmmmmmmmmmmmmmmmmmm": "20", "ppppppppppppppp": "15", "nnnnnnnnnnnnnnnnnnnn": "20", "qqqqqqqqqqqqqqq": "15", "oooooooooooooooooooo": "20", "rrrrrrrrrrrrrrr": "15", "pppppppppppppppppppp": "20", "sssssssssssssss": "15", "qqqqqqqqqqqqqqqqqqqq": "20", "ttttttttttttttt": "15", "rrrrrrrrrrrrrrrrrrrr": "20", "uuuuuuuuuuuuuuu": "15", "ssssssssssssssssssss": "20", "vvvvvvvvvvvvvvv": "15", "tttttttttttttttttttt": "20", "wwwwwwwwwwwwwww": "15", "uuuuuuuuuuuuuuuuuuuu": "20", "xxxxxxxxxxxxxxx": "15", "vvvvvvvvvvvvvvvvvvvv": "20", "yyyyyyyyyyyyyyy": "15", "wwwwwwwwwwwwwwwwwwww": "20", "zzzzzzzzzzzzzzz": "15", "xxxxxxxxxxxxxxxxxxxx": "20", "aaaaaaaaaaaaaaaa": "16", "yyyyyyyyyyyyyyyyyyyy": "20", "bbbbbbbbbbbbbbbb": "16", "zzzzzzzzzzzzzzzzzzzz": "20", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19"} + 2 | {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "vvvvvvvvvvvvvvvvvvv": "19", "yyyyyyyyyyyyyy": "14", "wwwwwwwwwwwwwwwwwww": "19", "zzzzzzzzzzzzzz": "14", "xxxxxxxxxxxxxxxxxxx": "19", "aaaaaaaaaaaaaaa": "15", "yyyyyyyyyyyyyyyyyyy": "19", "bbbbbbbbbbbbbbb": "15", "zzzzzzzzzzzzzzzzzzz": "19", "ccccccccccccccc": "15", "aaaaaaaaaaaaaaaaaaaa": "20", "ddddddddddddddd": "15", "bbbbbbbbbbbbbbbbbbbb": "20", "eeeeeeeeeeeeeee": "15", "cccccccccccccccccccc": "20", "fffffffffffffff": "15", "dddddddddddddddddddd": "20", "ggggggggggggggg": "15", "eeeeeeeeeeeeeeeeeeee": "20", "hhhhhhhhhhhhhhh": "15", "ffffffffffffffffffff": "20", "iiiiiiiiiiiiiii": "15", "gggggggggggggggggggg": "20", "jjjjjjjjjjjjjjj": "15", "hhhhhhhhhhhhhhhhhhhh": "20", "kkkkkkkkkkkkkkk": "15", "iiiiiiiiiiiiiiiiiiii": "20", "lllllllllllllll": "15", "jjjjjjjjjjjjjjjjjjjj": "20", "mmmmmmmmmmmmmmm": "15", "kkkkkkkkkkkkkkkkkkkk": "20", "nnnnnnnnnnnnnnn": "15", "llllllllllllllllllll": "20", "ooooooooooooooo": "15", "mmmmmmmmmmmmmmmmmmmm": "20", "ppppppppppppppp": "15", "nnnnnnnnnnnnnnnnnnnn": "20", "qqqqqqqqqqqqqqq": "15", "oooooooooooooooooooo": "20", "rrrrrrrrrrrrrrr": "15", "pppppppppppppppppppp": "20", "sssssssssssssss": "15", "qqqqqqqqqqqqqqqqqqqq": "20", "ttttttttttttttt": "15", "rrrrrrrrrrrrrrrrrrrr": "20", "uuuuuuuuuuuuuuu": "15", "ssssssssssssssssssss": "20", "vvvvvvvvvvvvvvv": "15", "tttttttttttttttttttt": "20", "wwwwwwwwwwwwwww": "15", "uuuuuuuuuuuuuuuuuuuu": "20", "xxxxxxxxxxxxxxx": "15", "vvvvvvvvvvvvvvvvvvvv": "20", "yyyyyyyyyyyyyyy": "15", "wwwwwwwwwwwwwwwwwwww": "20", "zzzzzzzzzzzzzzz": "15", "xxxxxxxxxxxxxxxxxxxx": "20", "aaaaaaaaaaaaaaaa": "16", "yyyyyyyyyyyyyyyyyyyy": "20", "bbbbbbbbbbbbbbbb": "16", "zzzzzzzzzzzzzzzzzzzz": "20", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19"} + 3 | {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "vvvvvvvvvvvvvvvvvvv": "19", "yyyyyyyyyyyyyy": "14", "wwwwwwwwwwwwwwwwwww": "19", "zzzzzzzzzzzzzz": "14", "xxxxxxxxxxxxxxxxxxx": "19", "aaaaaaaaaaaaaaa": "15", "yyyyyyyyyyyyyyyyyyy": "19", "bbbbbbbbbbbbbbb": "15", "zzzzzzzzzzzzzzzzzzz": "19", "ccccccccccccccc": "15", "aaaaaaaaaaaaaaaaaaaa": "20", "ddddddddddddddd": "15", "bbbbbbbbbbbbbbbbbbbb": "20", "eeeeeeeeeeeeeee": "15", "cccccccccccccccccccc": "20", "fffffffffffffff": "15", "dddddddddddddddddddd": "20", "ggggggggggggggg": "15", "eeeeeeeeeeeeeeeeeeee": "20", "hhhhhhhhhhhhhhh": "15", "ffffffffffffffffffff": "20", "iiiiiiiiiiiiiii": "15", "gggggggggggggggggggg": "20", "jjjjjjjjjjjjjjj": "15", "hhhhhhhhhhhhhhhhhhhh": "20", "kkkkkkkkkkkkkkk": "15", "iiiiiiiiiiiiiiiiiiii": "20", "lllllllllllllll": "15", "jjjjjjjjjjjjjjjjjjjj": "20", "mmmmmmmmmmmmmmm": "15", "kkkkkkkkkkkkkkkkkkkk": "20", "nnnnnnnnnnnnnnn": "15", "llllllllllllllllllll": "20", "ooooooooooooooo": "15", "mmmmmmmmmmmmmmmmmmmm": "20", "ppppppppppppppp": "15", "nnnnnnnnnnnnnnnnnnnn": "20", "qqqqqqqqqqqqqqq": "15", "oooooooooooooooooooo": "20", "rrrrrrrrrrrrrrr": "15", "pppppppppppppppppppp": "20", "sssssssssssssss": "15", "qqqqqqqqqqqqqqqqqqqq": "20", "ttttttttttttttt": "15", "rrrrrrrrrrrrrrrrrrrr": "20", "uuuuuuuuuuuuuuu": "15", "ssssssssssssssssssss": "20", "vvvvvvvvvvvvvvv": "15", "tttttttttttttttttttt": "20", "wwwwwwwwwwwwwww": "15", "uuuuuuuuuuuuuuuuuuuu": "20", "xxxxxxxxxxxxxxx": "15", "vvvvvvvvvvvvvvvvvvvv": "20", "yyyyyyyyyyyyyyy": "15", "wwwwwwwwwwwwwwwwwwww": "20", "zzzzzzzzzzzzzzz": "15", "xxxxxxxxxxxxxxxxxxxx": "20", "aaaaaaaaaaaaaaaa": "16", "yyyyyyyyyyyyyyyyyyyy": "20", "bbbbbbbbbbbbbbbb": "16", "zzzzzzzzzzzzzzzzzzzz": "20", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19"} (3 rows) -SELECT * FROM comp.t; - a ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "yyyyyyyyyyyyyy": "14", "zzzzzzzzzzzzzz": "14", "aaaaaaaaaaaaaaa": "15", "bbbbbbbbbbbbbbb": "15", "ccccccccccccccc": "15", "ddddddddddddddd": "15", "eeeeeeeeeeeeeee": "15", "fffffffffffffff": "15", "ggggggggggggggg": "15", "hhhhhhhhhhhhhhh": "15", "iiiiiiiiiiiiiii": "15", "jjjjjjjjjjjjjjj": "15", "kkkkkkkkkkkkkkk": "15", "lllllllllllllll": "15", "mmmmmmmmmmmmmmm": "15", "nnnnnnnnnnnnnnn": "15", "ooooooooooooooo": "15", "ppppppppppppppp": "15", "qqqqqqqqqqqqqqq": "15", "rrrrrrrrrrrrrrr": "15", "sssssssssssssss": "15", "ttttttttttttttt": "15", "uuuuuuuuuuuuuuu": "15", "vvvvvvvvvvvvvvv": "15", "wwwwwwwwwwwwwww": "15", "xxxxxxxxxxxxxxx": "15", "yyyyyyyyyyyyyyy": "15", "zzzzzzzzzzzzzzz": "15", "aaaaaaaaaaaaaaaa": "16", "bbbbbbbbbbbbbbbb": "16", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19", "vvvvvvvvvvvvvvvvvvv": "19", "wwwwwwwwwwwwwwwwwww": "19", "xxxxxxxxxxxxxxxxxxx": "19", "yyyyyyyyyyyyyyyyyyy": "19", "zzzzzzzzzzzzzzzzzzz": "19", "aaaaaaaaaaaaaaaaaaaa": "20", "bbbbbbbbbbbbbbbbbbbb": "20", "cccccccccccccccccccc": "20", "dddddddddddddddddddd": "20", "eeeeeeeeeeeeeeeeeeee": "20", "ffffffffffffffffffff": "20", "gggggggggggggggggggg": "20", "hhhhhhhhhhhhhhhhhhhh": "20", "iiiiiiiiiiiiiiiiiiii": "20", "jjjjjjjjjjjjjjjjjjjj": "20", "kkkkkkkkkkkkkkkkkkkk": "20", "llllllllllllllllllll": "20", "mmmmmmmmmmmmmmmmmmmm": "20", "nnnnnnnnnnnnnnnnnnnn": "20", "oooooooooooooooooooo": "20", "pppppppppppppppppppp": "20", "qqqqqqqqqqqqqqqqqqqq": "20", "rrrrrrrrrrrrrrrrrrrr": "20", "ssssssssssssssssssss": "20", "tttttttttttttttttttt": "20", "uuuuuuuuuuuuuuuuuuuu": "20", "vvvvvvvvvvvvvvvvvvvv": "20", "wwwwwwwwwwwwwwwwwwww": "20", "xxxxxxxxxxxxxxxxxxxx": "20", "yyyyyyyyyyyyyyyyyyyy": "20", "zzzzzzzzzzzzzzzzzzzz": "20"} - {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "yyyyyyyyyyyyyy": "14", "zzzzzzzzzzzzzz": "14", "aaaaaaaaaaaaaaa": "15", "bbbbbbbbbbbbbbb": "15", "ccccccccccccccc": "15", "ddddddddddddddd": "15", "eeeeeeeeeeeeeee": "15", "fffffffffffffff": "15", "ggggggggggggggg": "15", "hhhhhhhhhhhhhhh": "15", "iiiiiiiiiiiiiii": "15", "jjjjjjjjjjjjjjj": "15", "kkkkkkkkkkkkkkk": "15", "lllllllllllllll": "15", "mmmmmmmmmmmmmmm": "15", "nnnnnnnnnnnnnnn": "15", "ooooooooooooooo": "15", "ppppppppppppppp": "15", "qqqqqqqqqqqqqqq": "15", "rrrrrrrrrrrrrrr": "15", "sssssssssssssss": "15", "ttttttttttttttt": "15", "uuuuuuuuuuuuuuu": "15", "vvvvvvvvvvvvvvv": "15", "wwwwwwwwwwwwwww": "15", "xxxxxxxxxxxxxxx": "15", "yyyyyyyyyyyyyyy": "15", "zzzzzzzzzzzzzzz": "15", "aaaaaaaaaaaaaaaa": "16", "bbbbbbbbbbbbbbbb": "16", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19", "vvvvvvvvvvvvvvvvvvv": "19", "wwwwwwwwwwwwwwwwwww": "19", "xxxxxxxxxxxxxxxxxxx": "19", "yyyyyyyyyyyyyyyyyyy": "19", "zzzzzzzzzzzzzzzzzzz": "19", "aaaaaaaaaaaaaaaaaaaa": "20", "bbbbbbbbbbbbbbbbbbbb": "20", "cccccccccccccccccccc": "20", "dddddddddddddddddddd": "20", "eeeeeeeeeeeeeeeeeeee": "20", "ffffffffffffffffffff": "20", "gggggggggggggggggggg": "20", "hhhhhhhhhhhhhhhhhhhh": "20", "iiiiiiiiiiiiiiiiiiii": "20", "jjjjjjjjjjjjjjjjjjjj": "20", "kkkkkkkkkkkkkkkkkkkk": "20", "llllllllllllllllllll": "20", "mmmmmmmmmmmmmmmmmmmm": "20", "nnnnnnnnnnnnnnnnnnnn": "20", "oooooooooooooooooooo": "20", "pppppppppppppppppppp": "20", "qqqqqqqqqqqqqqqqqqqq": "20", "rrrrrrrrrrrrrrrrrrrr": "20", "ssssssssssssssssssss": "20", "tttttttttttttttttttt": "20", "uuuuuuuuuuuuuuuuuuuu": "20", "vvvvvvvvvvvvvvvvvvvv": "20", "wwwwwwwwwwwwwwwwwwww": "20", "xxxxxxxxxxxxxxxxxxxx": "20", "yyyyyyyyyyyyyyyyyyyy": "20", "zzzzzzzzzzzzzzzzzzzz": "20"} - {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "yyyyyyyyyyyyyy": "14", "zzzzzzzzzzzzzz": "14", "aaaaaaaaaaaaaaa": "15", "bbbbbbbbbbbbbbb": "15", "ccccccccccccccc": "15", "ddddddddddddddd": "15", "eeeeeeeeeeeeeee": "15", "fffffffffffffff": "15", "ggggggggggggggg": "15", "hhhhhhhhhhhhhhh": "15", "iiiiiiiiiiiiiii": "15", "jjjjjjjjjjjjjjj": "15", "kkkkkkkkkkkkkkk": "15", "lllllllllllllll": "15", "mmmmmmmmmmmmmmm": "15", "nnnnnnnnnnnnnnn": "15", "ooooooooooooooo": "15", "ppppppppppppppp": "15", "qqqqqqqqqqqqqqq": "15", "rrrrrrrrrrrrrrr": "15", "sssssssssssssss": "15", "ttttttttttttttt": "15", "uuuuuuuuuuuuuuu": "15", "vvvvvvvvvvvvvvv": "15", "wwwwwwwwwwwwwww": "15", "xxxxxxxxxxxxxxx": "15", "yyyyyyyyyyyyyyy": "15", "zzzzzzzzzzzzzzz": "15", "aaaaaaaaaaaaaaaa": "16", "bbbbbbbbbbbbbbbb": "16", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19", "vvvvvvvvvvvvvvvvvvv": "19", "wwwwwwwwwwwwwwwwwww": "19", "xxxxxxxxxxxxxxxxxxx": "19", "yyyyyyyyyyyyyyyyyyy": "19", "zzzzzzzzzzzzzzzzzzz": "19", "aaaaaaaaaaaaaaaaaaaa": "20", "bbbbbbbbbbbbbbbbbbbb": "20", "cccccccccccccccccccc": "20", "dddddddddddddddddddd": "20", "eeeeeeeeeeeeeeeeeeee": "20", "ffffffffffffffffffff": "20", "gggggggggggggggggggg": "20", "hhhhhhhhhhhhhhhhhhhh": "20", "iiiiiiiiiiiiiiiiiiii": "20", "jjjjjjjjjjjjjjjjjjjj": "20", "kkkkkkkkkkkkkkkkkkkk": "20", "llllllllllllllllllll": "20", "mmmmmmmmmmmmmmmmmmmm": "20", "nnnnnnnnnnnnnnnnnnnn": "20", "oooooooooooooooooooo": "20", "pppppppppppppppppppp": "20", "qqqqqqqqqqqqqqqqqqqq": "20", "rrrrrrrrrrrrrrrrrrrr": "20", "ssssssssssssssssssss": "20", "tttttttttttttttttttt": "20", "uuuuuuuuuuuuuuuuuuuu": "20", "vvvvvvvvvvvvvvvvvvvv": "20", "wwwwwwwwwwwwwwwwwwww": "20", "xxxxxxxxxxxxxxxxxxxx": "20", "yyyyyyyyyyyyyyyyyyyy": "20", "zzzzzzzzzzzzzzzzzzzz": "20"} +SELECT * FROM comp.t ORDER BY a; + a | b +---+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1 | {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "vvvvvvvvvvvvvvvvvvv": "19", "yyyyyyyyyyyyyy": "14", "wwwwwwwwwwwwwwwwwww": "19", "zzzzzzzzzzzzzz": "14", "xxxxxxxxxxxxxxxxxxx": "19", "aaaaaaaaaaaaaaa": "15", "yyyyyyyyyyyyyyyyyyy": "19", "bbbbbbbbbbbbbbb": "15", "zzzzzzzzzzzzzzzzzzz": "19", "ccccccccccccccc": "15", "aaaaaaaaaaaaaaaaaaaa": "20", "ddddddddddddddd": "15", "bbbbbbbbbbbbbbbbbbbb": "20", "eeeeeeeeeeeeeee": "15", "cccccccccccccccccccc": "20", "fffffffffffffff": "15", "dddddddddddddddddddd": "20", "ggggggggggggggg": "15", "eeeeeeeeeeeeeeeeeeee": "20", "hhhhhhhhhhhhhhh": "15", "ffffffffffffffffffff": "20", "iiiiiiiiiiiiiii": "15", "gggggggggggggggggggg": "20", "jjjjjjjjjjjjjjj": "15", "hhhhhhhhhhhhhhhhhhhh": "20", "kkkkkkkkkkkkkkk": "15", "iiiiiiiiiiiiiiiiiiii": "20", "lllllllllllllll": "15", "jjjjjjjjjjjjjjjjjjjj": "20", "mmmmmmmmmmmmmmm": "15", "kkkkkkkkkkkkkkkkkkkk": "20", "nnnnnnnnnnnnnnn": "15", "llllllllllllllllllll": "20", "ooooooooooooooo": "15", "mmmmmmmmmmmmmmmmmmmm": "20", "ppppppppppppppp": "15", "nnnnnnnnnnnnnnnnnnnn": "20", "qqqqqqqqqqqqqqq": "15", "oooooooooooooooooooo": "20", "rrrrrrrrrrrrrrr": "15", "pppppppppppppppppppp": "20", "sssssssssssssss": "15", "qqqqqqqqqqqqqqqqqqqq": "20", "ttttttttttttttt": "15", "rrrrrrrrrrrrrrrrrrrr": "20", "uuuuuuuuuuuuuuu": "15", "ssssssssssssssssssss": "20", "vvvvvvvvvvvvvvv": "15", "tttttttttttttttttttt": "20", "wwwwwwwwwwwwwww": "15", "uuuuuuuuuuuuuuuuuuuu": "20", "xxxxxxxxxxxxxxx": "15", "vvvvvvvvvvvvvvvvvvvv": "20", "yyyyyyyyyyyyyyy": "15", "wwwwwwwwwwwwwwwwwwww": "20", "zzzzzzzzzzzzzzz": "15", "xxxxxxxxxxxxxxxxxxxx": "20", "aaaaaaaaaaaaaaaa": "16", "yyyyyyyyyyyyyyyyyyyy": "20", "bbbbbbbbbbbbbbbb": "16", "zzzzzzzzzzzzzzzzzzzz": "20", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19"} + 2 | {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "vvvvvvvvvvvvvvvvvvv": "19", "yyyyyyyyyyyyyy": "14", "wwwwwwwwwwwwwwwwwww": "19", "zzzzzzzzzzzzzz": "14", "xxxxxxxxxxxxxxxxxxx": "19", "aaaaaaaaaaaaaaa": "15", "yyyyyyyyyyyyyyyyyyy": "19", "bbbbbbbbbbbbbbb": "15", "zzzzzzzzzzzzzzzzzzz": "19", "ccccccccccccccc": "15", "aaaaaaaaaaaaaaaaaaaa": "20", "ddddddddddddddd": "15", "bbbbbbbbbbbbbbbbbbbb": "20", "eeeeeeeeeeeeeee": "15", "cccccccccccccccccccc": "20", "fffffffffffffff": "15", "dddddddddddddddddddd": "20", "ggggggggggggggg": "15", "eeeeeeeeeeeeeeeeeeee": "20", "hhhhhhhhhhhhhhh": "15", "ffffffffffffffffffff": "20", "iiiiiiiiiiiiiii": "15", "gggggggggggggggggggg": "20", "jjjjjjjjjjjjjjj": "15", "hhhhhhhhhhhhhhhhhhhh": "20", "kkkkkkkkkkkkkkk": "15", "iiiiiiiiiiiiiiiiiiii": "20", "lllllllllllllll": "15", "jjjjjjjjjjjjjjjjjjjj": "20", "mmmmmmmmmmmmmmm": "15", "kkkkkkkkkkkkkkkkkkkk": "20", "nnnnnnnnnnnnnnn": "15", "llllllllllllllllllll": "20", "ooooooooooooooo": "15", "mmmmmmmmmmmmmmmmmmmm": "20", "ppppppppppppppp": "15", "nnnnnnnnnnnnnnnnnnnn": "20", "qqqqqqqqqqqqqqq": "15", "oooooooooooooooooooo": "20", "rrrrrrrrrrrrrrr": "15", "pppppppppppppppppppp": "20", "sssssssssssssss": "15", "qqqqqqqqqqqqqqqqqqqq": "20", "ttttttttttttttt": "15", "rrrrrrrrrrrrrrrrrrrr": "20", "uuuuuuuuuuuuuuu": "15", "ssssssssssssssssssss": "20", "vvvvvvvvvvvvvvv": "15", "tttttttttttttttttttt": "20", "wwwwwwwwwwwwwww": "15", "uuuuuuuuuuuuuuuuuuuu": "20", "xxxxxxxxxxxxxxx": "15", "vvvvvvvvvvvvvvvvvvvv": "20", "yyyyyyyyyyyyyyy": "15", "wwwwwwwwwwwwwwwwwwww": "20", "zzzzzzzzzzzzzzz": "15", "xxxxxxxxxxxxxxxxxxxx": "20", "aaaaaaaaaaaaaaaa": "16", "yyyyyyyyyyyyyyyyyyyy": "20", "bbbbbbbbbbbbbbbb": "16", "zzzzzzzzzzzzzzzzzzzz": "20", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19"} + 3 | {"aaaaaaaaaa": "10", "bbbbbbbbbb": "10", "cccccccccc": "10", "dddddddddd": "10", "eeeeeeeeee": "10", "ffffffffff": "10", "gggggggggg": "10", "hhhhhhhhhh": "10", "iiiiiiiiii": "10", "jjjjjjjjjj": "10", "kkkkkkkkkk": "10", "llllllllll": "10", "mmmmmmmmmm": "10", "nnnnnnnnnn": "10", "oooooooooo": "10", "pppppppppp": "10", "qqqqqqqqqq": "10", "rrrrrrrrrr": "10", "ssssssssss": "10", "tttttttttt": "10", "uuuuuuuuuu": "10", "vvvvvvvvvv": "10", "wwwwwwwwww": "10", "xxxxxxxxxx": "10", "yyyyyyyyyy": "10", "zzzzzzzzzz": "10", "aaaaaaaaaaa": "11", "bbbbbbbbbbb": "11", "ccccccccccc": "11", "ddddddddddd": "11", "eeeeeeeeeee": "11", "fffffffffff": "11", "ggggggggggg": "11", "hhhhhhhhhhh": "11", "iiiiiiiiiii": "11", "jjjjjjjjjjj": "11", "kkkkkkkkkkk": "11", "lllllllllll": "11", "mmmmmmmmmmm": "11", "nnnnnnnnnnn": "11", "ooooooooooo": "11", "ppppppppppp": "11", "qqqqqqqqqqq": "11", "rrrrrrrrrrr": "11", "sssssssssss": "11", "ttttttttttt": "11", "uuuuuuuuuuu": "11", "vvvvvvvvvvv": "11", "wwwwwwwwwww": "11", "xxxxxxxxxxx": "11", "yyyyyyyyyyy": "11", "zzzzzzzzzzz": "11", "aaaaaaaaaaaa": "12", "bbbbbbbbbbbb": "12", "cccccccccccc": "12", "dddddddddddd": "12", "eeeeeeeeeeee": "12", "ffffffffffff": "12", "gggggggggggg": "12", "hhhhhhhhhhhh": "12", "iiiiiiiiiiii": "12", "jjjjjjjjjjjj": "12", "kkkkkkkkkkkk": "12", "llllllllllll": "12", "mmmmmmmmmmmm": "12", "nnnnnnnnnnnn": "12", "oooooooooooo": "12", "pppppppppppp": "12", "qqqqqqqqqqqq": "12", "rrrrrrrrrrrr": "12", "ssssssssssss": "12", "tttttttttttt": "12", "uuuuuuuuuuuu": "12", "vvvvvvvvvvvv": "12", "wwwwwwwwwwww": "12", "xxxxxxxxxxxx": "12", "yyyyyyyyyyyy": "12", "zzzzzzzzzzzz": "12", "aaaaaaaaaaaaa": "13", "bbbbbbbbbbbbb": "13", "ccccccccccccc": "13", "ddddddddddddd": "13", "eeeeeeeeeeeee": "13", "fffffffffffff": "13", "ggggggggggggg": "13", "hhhhhhhhhhhhh": "13", "iiiiiiiiiiiii": "13", "jjjjjjjjjjjjj": "13", "kkkkkkkkkkkkk": "13", "lllllllllllll": "13", "mmmmmmmmmmmmm": "13", "nnnnnnnnnnnnn": "13", "ooooooooooooo": "13", "ppppppppppppp": "13", "qqqqqqqqqqqqq": "13", "rrrrrrrrrrrrr": "13", "sssssssssssss": "13", "ttttttttttttt": "13", "uuuuuuuuuuuuu": "13", "vvvvvvvvvvvvv": "13", "wwwwwwwwwwwww": "13", "xxxxxxxxxxxxx": "13", "yyyyyyyyyyyyy": "13", "zzzzzzzzzzzzz": "13", "aaaaaaaaaaaaaa": "14", "bbbbbbbbbbbbbb": "14", "cccccccccccccc": "14", "dddddddddddddd": "14", "eeeeeeeeeeeeee": "14", "ffffffffffffff": "14", "gggggggggggggg": "14", "hhhhhhhhhhhhhh": "14", "iiiiiiiiiiiiii": "14", "jjjjjjjjjjjjjj": "14", "kkkkkkkkkkkkkk": "14", "llllllllllllll": "14", "mmmmmmmmmmmmmm": "14", "nnnnnnnnnnnnnn": "14", "oooooooooooooo": "14", "pppppppppppppp": "14", "qqqqqqqqqqqqqq": "14", "rrrrrrrrrrrrrr": "14", "ssssssssssssss": "14", "tttttttttttttt": "14", "uuuuuuuuuuuuuu": "14", "vvvvvvvvvvvvvv": "14", "wwwwwwwwwwwwww": "14", "xxxxxxxxxxxxxx": "14", "vvvvvvvvvvvvvvvvvvv": "19", "yyyyyyyyyyyyyy": "14", "wwwwwwwwwwwwwwwwwww": "19", "zzzzzzzzzzzzzz": "14", "xxxxxxxxxxxxxxxxxxx": "19", "aaaaaaaaaaaaaaa": "15", "yyyyyyyyyyyyyyyyyyy": "19", "bbbbbbbbbbbbbbb": "15", "zzzzzzzzzzzzzzzzzzz": "19", "ccccccccccccccc": "15", "aaaaaaaaaaaaaaaaaaaa": "20", "ddddddddddddddd": "15", "bbbbbbbbbbbbbbbbbbbb": "20", "eeeeeeeeeeeeeee": "15", "cccccccccccccccccccc": "20", "fffffffffffffff": "15", "dddddddddddddddddddd": "20", "ggggggggggggggg": "15", "eeeeeeeeeeeeeeeeeeee": "20", "hhhhhhhhhhhhhhh": "15", "ffffffffffffffffffff": "20", "iiiiiiiiiiiiiii": "15", "gggggggggggggggggggg": "20", "jjjjjjjjjjjjjjj": "15", "hhhhhhhhhhhhhhhhhhhh": "20", "kkkkkkkkkkkkkkk": "15", "iiiiiiiiiiiiiiiiiiii": "20", "lllllllllllllll": "15", "jjjjjjjjjjjjjjjjjjjj": "20", "mmmmmmmmmmmmmmm": "15", "kkkkkkkkkkkkkkkkkkkk": "20", "nnnnnnnnnnnnnnn": "15", "llllllllllllllllllll": "20", "ooooooooooooooo": "15", "mmmmmmmmmmmmmmmmmmmm": "20", "ppppppppppppppp": "15", "nnnnnnnnnnnnnnnnnnnn": "20", "qqqqqqqqqqqqqqq": "15", "oooooooooooooooooooo": "20", "rrrrrrrrrrrrrrr": "15", "pppppppppppppppppppp": "20", "sssssssssssssss": "15", "qqqqqqqqqqqqqqqqqqqq": "20", "ttttttttttttttt": "15", "rrrrrrrrrrrrrrrrrrrr": "20", "uuuuuuuuuuuuuuu": "15", "ssssssssssssssssssss": "20", "vvvvvvvvvvvvvvv": "15", "tttttttttttttttttttt": "20", "wwwwwwwwwwwwwww": "15", "uuuuuuuuuuuuuuuuuuuu": "20", "xxxxxxxxxxxxxxx": "15", "vvvvvvvvvvvvvvvvvvvv": "20", "yyyyyyyyyyyyyyy": "15", "wwwwwwwwwwwwwwwwwwww": "20", "zzzzzzzzzzzzzzz": "15", "xxxxxxxxxxxxxxxxxxxx": "20", "aaaaaaaaaaaaaaaa": "16", "yyyyyyyyyyyyyyyyyyyy": "20", "bbbbbbbbbbbbbbbb": "16", "zzzzzzzzzzzzzzzzzzzz": "20", "cccccccccccccccc": "16", "dddddddddddddddd": "16", "eeeeeeeeeeeeeeee": "16", "ffffffffffffffff": "16", "gggggggggggggggg": "16", "hhhhhhhhhhhhhhhh": "16", "iiiiiiiiiiiiiiii": "16", "jjjjjjjjjjjjjjjj": "16", "kkkkkkkkkkkkkkkk": "16", "llllllllllllllll": "16", "mmmmmmmmmmmmmmmm": "16", "nnnnnnnnnnnnnnnn": "16", "oooooooooooooooo": "16", "pppppppppppppppp": "16", "qqqqqqqqqqqqqqqq": "16", "rrrrrrrrrrrrrrrr": "16", "ssssssssssssssss": "16", "tttttttttttttttt": "16", "uuuuuuuuuuuuuuuu": "16", "vvvvvvvvvvvvvvvv": "16", "wwwwwwwwwwwwwwww": "16", "xxxxxxxxxxxxxxxx": "16", "yyyyyyyyyyyyyyyy": "16", "zzzzzzzzzzzzzzzz": "16", "aaaaaaaaaaaaaaaaa": "17", "bbbbbbbbbbbbbbbbb": "17", "ccccccccccccccccc": "17", "ddddddddddddddddd": "17", "eeeeeeeeeeeeeeeee": "17", "fffffffffffffffff": "17", "ggggggggggggggggg": "17", "hhhhhhhhhhhhhhhhh": "17", "iiiiiiiiiiiiiiiii": "17", "jjjjjjjjjjjjjjjjj": "17", "kkkkkkkkkkkkkkkkk": "17", "lllllllllllllllll": "17", "mmmmmmmmmmmmmmmmm": "17", "nnnnnnnnnnnnnnnnn": "17", "ooooooooooooooooo": "17", "ppppppppppppppppp": "17", "qqqqqqqqqqqqqqqqq": "17", "rrrrrrrrrrrrrrrrr": "17", "sssssssssssssssss": "17", "ttttttttttttttttt": "17", "uuuuuuuuuuuuuuuuu": "17", "vvvvvvvvvvvvvvvvv": "17", "wwwwwwwwwwwwwwwww": "17", "xxxxxxxxxxxxxxxxx": "17", "yyyyyyyyyyyyyyyyy": "17", "zzzzzzzzzzzzzzzzz": "17", "aaaaaaaaaaaaaaaaaa": "18", "bbbbbbbbbbbbbbbbbb": "18", "cccccccccccccccccc": "18", "dddddddddddddddddd": "18", "eeeeeeeeeeeeeeeeee": "18", "ffffffffffffffffff": "18", "gggggggggggggggggg": "18", "hhhhhhhhhhhhhhhhhh": "18", "iiiiiiiiiiiiiiiiii": "18", "jjjjjjjjjjjjjjjjjj": "18", "kkkkkkkkkkkkkkkkkk": "18", "llllllllllllllllll": "18", "mmmmmmmmmmmmmmmmmm": "18", "nnnnnnnnnnnnnnnnnn": "18", "oooooooooooooooooo": "18", "pppppppppppppppppp": "18", "qqqqqqqqqqqqqqqqqq": "18", "rrrrrrrrrrrrrrrrrr": "18", "ssssssssssssssssss": "18", "tttttttttttttttttt": "18", "uuuuuuuuuuuuuuuuuu": "18", "vvvvvvvvvvvvvvvvvv": "18", "wwwwwwwwwwwwwwwwww": "18", "xxxxxxxxxxxxxxxxxx": "18", "yyyyyyyyyyyyyyyyyy": "18", "zzzzzzzzzzzzzzzzzz": "18", "aaaaaaaaaaaaaaaaaaa": "19", "bbbbbbbbbbbbbbbbbbb": "19", "ccccccccccccccccccc": "19", "ddddddddddddddddddd": "19", "eeeeeeeeeeeeeeeeeee": "19", "fffffffffffffffffff": "19", "ggggggggggggggggggg": "19", "hhhhhhhhhhhhhhhhhhh": "19", "iiiiiiiiiiiiiiiiiii": "19", "jjjjjjjjjjjjjjjjjjj": "19", "kkkkkkkkkkkkkkkkkkk": "19", "lllllllllllllllllll": "19", "mmmmmmmmmmmmmmmmmmm": "19", "nnnnnnnnnnnnnnnnnnn": "19", "ooooooooooooooooooo": "19", "ppppppppppppppppppp": "19", "qqqqqqqqqqqqqqqqqqq": "19", "rrrrrrrrrrrrrrrrrrr": "19", "sssssssssssssssssss": "19", "ttttttttttttttttttt": "19", "uuuuuuuuuuuuuuuuuuu": "19"} (3 rows) DROP SCHEMA comp CASCADE; -NOTICE: drop cascades to 5 other objects +NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to extension jsonbd -drop cascades to compression method cm1 -drop cascades to compression options for cm1 drop cascades to table comp.t drop cascades to function comp.add_record() diff --git a/jsonbd--0.1.sql b/jsonbd--0.1.sql index b8d767c..89aa583 100644 --- a/jsonbd--0.1.sql +++ b/jsonbd--0.1.sql @@ -1,5 +1,15 @@ CREATE OR REPLACE FUNCTION jsonbd_compression_handler(INTERNAL) -RETURNS COMPRESSION_HANDLER AS 'MODULE_PATHNAME', 'jsonbd_compression_handler' +RETURNS COMPRESSION_AM_HANDLER AS 'MODULE_PATHNAME', 'jsonbd_compression_handler' LANGUAGE C STRICT; -CREATE COMPRESSION METHOD jsonbd HANDLER jsonbd_compression_handler; +CREATE TABLE jsonbd_dictionary( + acoid OID NOT NULL, + id INT4 NOT NULL, + key TEXT NOT NULL +); + +CREATE UNIQUE INDEX jsonbd_dict_on_id ON jsonbd_dictionary(acoid, id); +CREATE UNIQUE INDEX jsonbd_dict_on_key ON jsonbd_dictionary(acoid, key); + +CREATE ACCESS METHOD jsonbd + TYPE COMPRESSION HANDLER jsonbd_compression_handler; diff --git a/jsonbd.c b/jsonbd.c index bdf6cc3..511cfcf 100644 --- a/jsonbd.c +++ b/jsonbd.c @@ -4,7 +4,7 @@ #include "postgres.h" #include "fmgr.h" -#include "access/compression.h" +#include "access/cmapi.h" #include "access/htup_details.h" #include "access/sysattr.h" #include "access/xact.h" @@ -304,6 +304,7 @@ jsonbd_communicate(shm_mq_iovec *iov, int iov_len, hdr = shm_toc_lookup(toc, 0, false); +begin: /* * find some not busy worker, * the backend can intercept a worker that just started by another @@ -360,15 +361,15 @@ jsonbd_communicate(shm_mq_iovec *iov, int iov_len, mqout = shm_mq_create(hdr->launcher.mqout, shm_mq_minimum_size); /* - * important that sender on mqout should be set earlier than - * receiver on mqin - */ - shm_mq_set_sender(mqout, hdr->launcher.proc); + * set sender, create handle and wake up launcher and wait until + * it's connected + * */ shm_mq_set_receiver(mqout, MyProc); shm_mq_set_sender(mqin, MyProc); - shm_mq_set_receiver(mqin, hdr->launcher.proc); - mqh = shm_mq_attach(mqin, NULL, NULL); + SetLatch(&hdr->launcher.proc->procLatch); + shm_mq_wait_for_attach(mqh); + resmq = shm_mq_sendv(mqh, &((shm_mq_iovec) {(char *) &MyDatabaseId, sizeof(MyDatabaseId)}), 1, false); if (resmq != SHM_MQ_SUCCESS) @@ -398,6 +399,17 @@ jsonbd_communicate(shm_mq_iovec *iov, int iov_len, comm: Assert(wd != NULL); + Assert(LWLockHeldByMe(wd->lock)); + + /* + * Even if we got the lock it doesn't mean that worker is free, + * so try to set busy flag + */ + if (!pg_atomic_test_set_flag(&wd->busy)) + { + LWLockRelease(wd->lock); + goto begin; + } detached = false; @@ -405,12 +417,17 @@ jsonbd_communicate(shm_mq_iovec *iov, int iov_len, mqin = shm_mq_create(wd->mqin, jsonbd_total_queue_size); mqout = shm_mq_create(wd->mqout, jsonbd_total_queue_size); - shm_mq_set_sender(mqin, MyProc); - shm_mq_set_receiver(mqin, wd->proc); - shm_mq_set_sender(mqout, wd->proc); + /* + * create handle and wake up worker and wait until + * it's connected + * */ shm_mq_set_receiver(mqout, MyProc); - + shm_mq_set_sender(mqin, MyProc); mqh = shm_mq_attach(mqin, NULL, NULL); + SetLatch(&wd->latch); + shm_mq_wait_for_attach(mqh); + + /* send data */ resmq = shm_mq_sendv(mqh, iov, iov_len, false); if (resmq != SHM_MQ_SUCCESS) detached = true; @@ -643,7 +660,7 @@ packJsonbValue(JsonbValue *val, int header_size, int *len) /* Compress jsonb using dictionary */ static struct varlena * -jsonbd_compress(CompressionMethodOptions *cmoptions, const struct varlena *data) +jsonbd_cmcompress(CompressionAmOptions *cmoptions, const struct varlena *data) { int size; JsonbIteratorToken r; @@ -712,7 +729,7 @@ jsonbd_compress(CompressionMethodOptions *cmoptions, const struct varlena *data) Assert(offset == len); /* retrieve or generate ids */ - jsonbd_worker_get_key_ids(cmoptions->cmoptoid, buf, len, idsbuf, nkeys); + jsonbd_worker_get_key_ids(cmoptions->acoid, buf, len, idsbuf, nkeys); /* replace the old keys with encoded ids */ for (i = 0; i < nkeys; i++) @@ -740,15 +757,23 @@ jsonbd_compress(CompressionMethodOptions *cmoptions, const struct varlena *data) return res; } +static void * +jsonbd_cminitstate(Oid acoid, List *options) +{ + if (!OidIsValid(jsonbd_get_dictionary_relid())) + elog(ERROR, "could not create jsonbd dictionary"); + + return NULL; +} + static void -jsonbd_configure(Form_pg_attribute attr, List *options) +jsonbd_cmdrop(Oid acoid) { - if (options != NIL) - elog(ERROR, "the compression method for jsonbd doesn't take any options"); + /* TODO: if there is no compression options, remove the dictionary */ } static struct varlena * -jsonbd_decompress(CompressionMethodOptions *cmoptions, const struct varlena *data) +jsonbd_cmdecompress(CompressionAmOptions *cmoptions, const struct varlena *data) { JsonbIteratorToken r; JsonbValue v, @@ -796,7 +821,7 @@ jsonbd_decompress(CompressionMethodOptions *cmoptions, const struct varlena *dat } /* retrieve keys */ - buf = jsonbd_worker_get_keys(cmoptions->cmoptoid, compression_buffers->idsbuf, nkeys, &buflen); + buf = jsonbd_worker_get_keys(cmoptions->acoid, compression_buffers->idsbuf, nkeys, &buflen); if (buf == NULL) elog(ERROR, "jsonbd: decompression error"); @@ -824,21 +849,24 @@ jsonbd_decompress(CompressionMethodOptions *cmoptions, const struct varlena *dat return res; } +static void +jsonbd_cmcheck(Form_pg_attribute att, List *options) +{ + if (att->atttypid != JSONBOID) + elog(ERROR, "unexpected type %d for jsonbd compression handler", + att->atttypid); +} + Datum jsonbd_compression_handler(PG_FUNCTION_ARGS) { - CompressionMethodRoutine *cmr = makeNode(CompressionMethodRoutine); - CompressionMethodOpArgs *opargs = - (CompressionMethodOpArgs *) PG_GETARG_POINTER(0); - Oid typeid = opargs->typeid; - - if (OidIsValid(typeid) && typeid != JSONBOID) - elog(ERROR, "unexpected type %d for jsonbd compression handler", typeid); + CompressionAmRoutine *routine = makeNode(CompressionAmRoutine); - cmr->configure = jsonbd_configure; - cmr->drop = NULL; - cmr->compress = jsonbd_compress; - cmr->decompress = jsonbd_decompress; + routine->cmcheck = jsonbd_cmcheck; + routine->cmdrop = jsonbd_cmdrop; /* no drop behavior */ + routine->cminitstate = jsonbd_cminitstate; + routine->cmcompress = jsonbd_cmcompress; + routine->cmdecompress = jsonbd_cmdecompress; - PG_RETURN_POINTER(cmr); + PG_RETURN_POINTER(routine); } diff --git a/jsonbd.h b/jsonbd.h index 1364695..fed7ef2 100644 --- a/jsonbd.h +++ b/jsonbd.h @@ -28,6 +28,8 @@ typedef struct jsonbd_shm_worker PGPROC *proc; volatile Oid dboid; /* database of the worker */ LWLock *lock; + Latch latch; + pg_atomic_flag busy; /* worker is busy */ } jsonbd_shm_worker; /* Shared memory structures */ @@ -74,6 +76,7 @@ typedef struct jsonbd_worker_args extern void _PG_init(void); extern void jsonbd_register_launcher(void); +extern Oid jsonbd_get_dictionary_relid(void); extern void *workers_data; extern int jsonbd_nworkers; diff --git a/jsonbd_utils.c b/jsonbd_utils.c index face6fe..3ab9347 100644 --- a/jsonbd_utils.c +++ b/jsonbd_utils.c @@ -2,15 +2,22 @@ #include "jsonbd_utils.h" #include "postgres.h" +#include "access/htup_details.h" +#include "access/xact.h" +#include "access/sysattr.h" +#include "catalog/indexing.h" +#include "catalog/pg_extension.h" +#include "commands/extension.h" #include "nodes/execnodes.h" #include "nodes/makefuncs.h" +#include "utils/fmgroids.h" #include "utils/rel.h" #if PG_VERSION_NUM == 110000 struct shm_mq_alt { slock_t mq_mutex; - PGPROC *mq_receiver; /* this one */ + PGPROC *mq_receiver; /* we need this one */ PGPROC *mq_sender; /* this one */ uint64 mq_bytes_read; uint64 mq_bytes_written; @@ -127,3 +134,43 @@ shm_mq_clean_receiver(shm_mq *mq) amq->mq_receiver = NULL; amq->mq_detached = false; } + +Oid +get_jsonbd_schema(void) +{ + Oid result; + Relation rel; + SysScanDesc scandesc; + HeapTuple tuple; + ScanKeyData entry[1]; + Oid ext_oid; + + if (!IsTransactionState()) + return InvalidOid; + + ext_oid = get_extension_oid("jsonbd", true); + if (ext_oid == InvalidOid) + return InvalidOid; /* exit if pg_pathman does not exist */ + + ScanKeyInit(&entry[0], + ObjectIdAttributeNumber, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(ext_oid)); + + rel = heap_open(ExtensionRelationId, AccessShareLock); + scandesc = systable_beginscan(rel, ExtensionOidIndexId, true, + NULL, 1, entry); + + tuple = systable_getnext(scandesc); + + /* We assume that there can be at most one matching tuple */ + if (HeapTupleIsValid(tuple)) + result = ((Form_pg_extension) GETSTRUCT(tuple))->extnamespace; + else + result = InvalidOid; + + systable_endscan(scandesc); + + heap_close(rel, AccessShareLock); + return result; +} diff --git a/jsonbd_utils.h b/jsonbd_utils.h index 961e913..562c234 100644 --- a/jsonbd_utils.h +++ b/jsonbd_utils.h @@ -8,5 +8,6 @@ extern uint32 qhashmurmur3_32(const void *data, size_t nbytes); extern void shm_mq_clean_receiver(shm_mq *mq); extern void shm_mq_clean_sender(shm_mq *mq); +Oid get_jsonbd_schema(void); #endif diff --git a/jsonbd_worker.c b/jsonbd_worker.c index 778b416..e9cb5b6 100644 --- a/jsonbd_worker.c +++ b/jsonbd_worker.c @@ -33,6 +33,7 @@ #include "utils/resowner.h" #include "utils/snapmgr.h" #include "utils/tqual.h" +#include "utils/syscache.h" static bool xact_started = false; static bool shutdown_requested = false; @@ -47,26 +48,18 @@ Oid jsonbd_id_indoid = InvalidOid; void jsonbd_worker_main(Datum arg); void jsonbd_launcher_main(Datum arg); -static Oid jsonbd_get_dictionary_relid(void); static bool jsonbd_register_worker(int, Oid, int); +static char *jsonbd_get_dictionary_name(Oid relid); #define JSONBD_DICTIONARY_REL "jsonbd_dictionary" -static const char *sql_dictionary = \ - "CREATE TABLE public." JSONBD_DICTIONARY_REL - " (cmopt OID NOT NULL," - " id INT4 NOT NULL," - " key TEXT NOT NULL);" - "CREATE UNIQUE INDEX jsonbd_dict_on_id ON " JSONBD_DICTIONARY_REL "(cmopt, id);" - "CREATE UNIQUE INDEX jsonbd_dict_on_key ON " JSONBD_DICTIONARY_REL " (cmopt, key);"; - static const char *sql_insert = \ - "WITH t AS (SELECT (COALESCE(MAX(id), 0) + 1) new_id FROM " - JSONBD_DICTIONARY_REL " WHERE cmopt = %d) INSERT INTO " JSONBD_DICTIONARY_REL + "WITH t AS (SELECT (COALESCE(MAX(id), 0) + 1) new_id FROM %s" + " WHERE acoid = %d) INSERT INTO %s" " SELECT %d, t.new_id, '%s' FROM t RETURNING id"; enum { - JSONBD_DICTIONARY_REL_ATT_CMOPT = 1, + JSONBD_DICTIONARY_REL_ATT_ACOID = 1, JSONBD_DICTIONARY_REL_ATT_ID, JSONBD_DICTIONARY_REL_ATT_KEY, JSONBD_DICTIONARY_REL_ATT_COUNT @@ -142,9 +135,7 @@ init_worker(dsm_segment *seg) Assert(worker_context == NULL); worker_context = AllocSetContextCreate(TopMemoryContext, "jsonbd worker context", - ALLOCSET_DEFAULT_MINSIZE, - ALLOCSET_DEFAULT_INITSIZE, - ALLOCSET_DEFAULT_MAXSIZE); + ALLOCSET_DEFAULT_SIZES); worker_cache_context = AllocSetContextCreate(TopMemoryContext, "jsonbd worker cache context", @@ -169,6 +160,8 @@ init_worker(dsm_segment *seg) /* Set launcher free */ SetLatch(&hdr->launcher_latch); + InitLatch(&worker_state->latch); + pg_atomic_init_flag(&worker_state->busy); /* make this worker visible in backend cycle */ hdr->workers_ready++; @@ -349,15 +342,24 @@ jsonbd_get_key_id(Relation rel, Relation indrel, Oid cmoptoid, char *key) /* * Get key IDs using relation */ -static void +static bool jsonbd_get_key_ids(Oid cmoptoid, char *buf, uint32 *idsbuf, int nkeys) { Relation rel = NULL; Relation indrel; int i; Oid relid = jsonbd_get_dictionary_relid(); - bool spi_on = false; + bool spi_on = false, + failed = false; jsonbd_cached_cmopt *cmcache; + static char *relname = NULL; + + if (relname == NULL) + { + start_xact_command(); + relname = jsonbd_get_dictionary_name(relid); + finish_xact_command(); + } cmcache = get_cached_compression_options(cmoptoid); @@ -421,20 +423,27 @@ jsonbd_get_key_ids(Oid cmoptoid, char *buf, uint32 *idsbuf, int nkeys) /* still need to add */ Datum datum; bool isnull; - char *sql2 = psprintf(sql_insert, cmoptoid, cmoptoid, buf); + char *sql2 = psprintf(sql_insert, relname, cmoptoid, + relname, cmoptoid, buf); /* TODO: maybe use bulk inserts instead of SPI */ if (!spi_on) { /* lazy SPI initialization */ if (SPI_connect() != SPI_OK_CONNECT) - elog(ERROR, "SPI_connect failed"); + { + failed = true; + goto finish; + } spi_on = true; } if (SPI_exec(sql2, 0) != SPI_OK_INSERT_RETURNING) - elog(ERROR, "SPI_exec failed"); + { + failed = true; + goto finish; + } pfree(sql2); @@ -457,6 +466,7 @@ jsonbd_get_key_ids(Oid cmoptoid, char *buf, uint32 *idsbuf, int nkeys) while (*buf++ != '\0'); } +finish: if (spi_on) SPI_finish(); @@ -464,39 +474,35 @@ jsonbd_get_key_ids(Oid cmoptoid, char *buf, uint32 *idsbuf, int nkeys) { index_close(indrel, AccessShareLock); relation_close(rel, AccessShareLock); - finish_xact_command(); } + + if (failed && xact_started) + AbortCurrentTransaction(); + else if (!failed) + finish_xact_command(); + + return !failed; } static char * jsonbd_cmd_get_ids(int nkeys, Oid cmoptoid, char *buf, size_t *buflen) { + bool ok; uint32 *idsbuf; MemoryContext old_mcxt = CurrentMemoryContext;; *buflen = nkeys * sizeof(uint32); idsbuf = (uint32 *) palloc(*buflen); - - PG_TRY(); - { - start_xact_command(); - jsonbd_get_key_ids(cmoptoid, buf, idsbuf, nkeys); - finish_xact_command(); - } - PG_CATCH(); + ok = jsonbd_get_key_ids(cmoptoid, buf, idsbuf, nkeys); + if (!ok) { - ErrorData *error; - MemoryContextSwitchTo(old_mcxt); - error = CopyErrorData(); - elog(LOG, "jsonbd: error occured: %s", error->message); - FlushErrorState(); - pfree(error); + elog(LOG, "jsonbd: cannot get ids"); idsbuf[0] = 0; *buflen = 1; } - PG_END_TRY(); + MemoryContextSwitchTo(old_mcxt); return (char *) idsbuf; } @@ -530,7 +536,7 @@ jsonbd_launcher_main(Datum arg) shm_toc *toc; jsonbd_shm_hdr *hdr; - shm_mq_handle *mqh = NULL; + shm_mq_handle *mqh; int worker_num = 1; int database_num = 0; @@ -568,22 +574,41 @@ jsonbd_launcher_main(Datum arg) if (shutdown_requested) break; - rc = WaitLatch(&MyProc->procLatch, WL_LATCH_SET | WL_POSTMASTER_DEATH, - 0, PG_WAIT_EXTENSION); + /* Wait to be signalled. */ + rc = WaitLatch(MyLatch, WL_LATCH_SET | WL_POSTMASTER_DEATH, + 0, PG_WAIT_EXTENSION); if (rc & WL_POSTMASTER_DEATH) break; - ResetLatch(&MyProc->procLatch); + /* Reset the latch so we don't spin. */ + ResetLatch(MyLatch); - if (shm_mq_get_receiver(worker_state->mqin) != MyProc) + if (shm_mq_get_sender(worker_state->mqin) == NULL) + { + CHECK_FOR_INTERRUPTS(); continue; + } - Assert(shm_mq_get_sender(worker_state->mqout) == MyProc); + /* + * set myself as receiver on mqin and sender on mqout, + * and get data from backend + * */ + if (!shm_mq_get_sender(worker_state->mqout)) + shm_mq_set_sender(worker_state->mqout, MyProc); + + if (!shm_mq_get_receiver(worker_state->mqin)) + shm_mq_set_receiver(worker_state->mqin, MyProc); mqh = shm_mq_attach(worker_state->mqin, NULL, NULL); resmq = shm_mq_receive(mqh, &nbytes, &data, false); + if (resmq == SHM_MQ_DETACHED) + { + shm_mq_detach(mqh); + continue; + } + if (resmq == SHM_MQ_SUCCESS) { int started = 0; @@ -610,9 +635,6 @@ jsonbd_launcher_main(Datum arg) shm_mq_detach(mqh); - /* we don't need start this cycle again after we send data */ - shm_mq_clean_receiver(worker_state->mqin); - mqh = shm_mq_attach(worker_state->mqout, NULL, NULL); if (started) { @@ -625,15 +647,11 @@ jsonbd_launcher_main(Datum arg) } else resmq = shm_mq_sendv(mqh, &((shm_mq_iovec) {"n", 2}), 1, false); - - if (resmq != SHM_MQ_SUCCESS) - elog(NOTICE, "jsonbd: backend detached early"); - - shm_mq_detach(mqh); - - /* mark we need new handle */ - mqh = NULL; } + if (resmq != SHM_MQ_SUCCESS) + elog(NOTICE, "jsonbd: backend detached early"); + + /* shm_mq_detach(mqh); */ } elog(LOG, "jsonbd launcher has ended its work"); @@ -657,6 +675,9 @@ jsonbd_worker_main(Datum arg) /* Initialize connection and local variables */ seg = dsm_attach((dsm_handle) DatumGetInt32(arg)); + if (!seg) + goto finish; + init_worker(seg); MemoryContextSwitchTo(worker_context); @@ -672,22 +693,37 @@ jsonbd_worker_main(Datum arg) if (shutdown_requested) break; - rc = WaitLatch(&MyProc->procLatch, WL_LATCH_SET | WL_POSTMASTER_DEATH, - 0, PG_WAIT_EXTENSION); + /* Wait to be signalled. */ + rc = WaitLatch(&worker_state->latch, WL_LATCH_SET | WL_POSTMASTER_DEATH, + 0, PG_WAIT_EXTENSION); if (rc & WL_POSTMASTER_DEATH) break; - ResetLatch(&MyProc->procLatch); + /* Reset the latch so we don't spin. */ + ResetLatch(&worker_state->latch); - if (shm_mq_get_receiver(worker_state->mqin) != MyProc) + if (shm_mq_get_sender(worker_state->mqin) == NULL) + { + CHECK_FOR_INTERRUPTS(); continue; + } + + if (!shm_mq_get_sender(worker_state->mqout)) + shm_mq_set_sender(worker_state->mqout, MyProc); - Assert(shm_mq_get_sender(worker_state->mqout) == MyProc); + if (!shm_mq_get_receiver(worker_state->mqin)) + shm_mq_set_receiver(worker_state->mqin, MyProc); mqh = shm_mq_attach(worker_state->mqin, NULL, NULL); resmq = shm_mq_receive(mqh, &nbytes, &data, false); + if (resmq == SHM_MQ_DETACHED) + { + shm_mq_detach(mqh); + continue; + } + if (resmq == SHM_MQ_SUCCESS) { JsonbcCommand cmd; @@ -733,7 +769,6 @@ jsonbd_worker_main(Datum arg) } shm_mq_detach(mqh); - shm_mq_clean_receiver(worker_state->mqin); mqh = shm_mq_attach(worker_state->mqout, NULL, NULL); if (iov != NULL) @@ -746,9 +781,11 @@ jsonbd_worker_main(Datum arg) shm_mq_detach(mqh); MemoryContextReset(worker_context); + pg_atomic_clear_flag(&worker_state->busy); } } +finish: elog(LOG, "jsonbd dictionary worker has ended its work"); proc_exit(0); } @@ -832,38 +869,19 @@ jsonbd_register_launcher(void) RegisterBackgroundWorker(&worker); } -static Oid +Oid jsonbd_get_dictionary_relid(void) { - Oid relid, - nspoid; + Oid relid; if (OidIsValid(jsonbd_dictionary_reloid)) return jsonbd_dictionary_reloid; start_xact_command(); - nspoid = get_namespace_oid("public", false); - relid = get_relname_relid(JSONBD_DICTIONARY_REL, nspoid); + relid = get_relname_relid(JSONBD_DICTIONARY_REL, get_jsonbd_schema()); if (relid == InvalidOid) - { - if (SPI_connect() != SPI_OK_CONNECT) - elog(ERROR, "SPI_connect failed"); - - if (SPI_execute(sql_dictionary, false, 0) != SPI_OK_UTILITY) - elog(ERROR, "could not create \"jsonbd\" dictionary"); - - SPI_finish(); - CommandCounterIncrement(); - - finish_xact_command(); - start_xact_command(); - - /* get just created table Oid */ - relid = get_relname_relid(JSONBD_DICTIONARY_REL, nspoid); - jsonbd_id_indoid = InvalidOid; - jsonbd_keys_indoid = InvalidOid; - } + elog(ERROR, "jsonbd dictionary relation does not exist"); /* fill index Oids too */ if (jsonbd_id_indoid == InvalidOid) @@ -907,3 +925,33 @@ jsonbd_get_dictionary_relid(void) jsonbd_dictionary_reloid = relid; return relid; } + +static char * +jsonbd_get_dictionary_name(Oid relid) +{ + HeapTuple tp; + Form_pg_class reltup; + char *relname; + char *nspname; + char *result; + MemoryContext old_mcxt; + + tp = SearchSysCache1(RELOID, ObjectIdGetDatum(relid)); + if (!HeapTupleIsValid(tp)) + elog(ERROR, "cache lookup failed for relation %u", relid); + reltup = (Form_pg_class) GETSTRUCT(tp); + relname = NameStr(reltup->relname); + + nspname = get_namespace_name(reltup->relnamespace); + if (!nspname) + elog(ERROR, "cache lookup failed for namespace %u", + reltup->relnamespace); + + old_mcxt = MemoryContextSwitchTo(TopMemoryContext); + result = quote_qualified_identifier(nspname, relname); + MemoryContextSwitchTo(old_mcxt); + + ReleaseSysCache(tp); + + return result; +} diff --git a/sql/basic.sql b/sql/basic.sql index 28e7c6e..c8aafc9 100644 --- a/sql/basic.sql +++ b/sql/basic.sql @@ -1,12 +1,12 @@ CREATE SCHEMA comp; CREATE EXTENSION jsonbd SCHEMA comp; -CREATE TABLE comp.t(a JSONB COMPRESSION jsonbd); +CREATE TABLE comp.t(a SERIAL, b JSONB COMPRESSION jsonbd); \d+ comp.t; CREATE OR REPLACE FUNCTION comp.add_record() RETURNS VOID AS $$ BEGIN - INSERT INTO comp.t + INSERT INTO comp.t(b) SELECT jsonb_object(array_agg(array[repeat(letter, count), count::text])) FROM ( SELECT chr(i) AS letter, b AS count @@ -22,7 +22,7 @@ SELECT comp.add_record(); SELECT comp.add_record(); SELECT comp.add_record(); -SELECT * FROM comp.t; -SELECT * FROM comp.t; +SELECT * FROM comp.t ORDER BY a; +SELECT * FROM comp.t ORDER BY a; DROP SCHEMA comp CASCADE;