Wpis z mikrobloga

Czy w #postgresql można byłoby podzielić tabelę na 256 partycji wg. pierwszego bajtu jednej z kolumn typu BYTEA?
Próbuję wrzucić transakcje Bitcoin do PostgreSQL. Wszystkich aktualnie jest ~622 468 868. Na początku, bez partycji wszystko wyglądało obiecująco ale po 10m rekordów, wydajność insertów mocno siadła. Jedna z kolumn TX zawiera 32 bajty które są identyfikatorem transakcji. Pomyślałem sobie, że można byłoby na podstawie pierwszego bajtu tej kolumny podzielić ją na 256 partycji - tylko nie wiem czy #postgres to umożliwia?
  • 9
EDIT: Wygląda na to, że największym błędem było poleganie na domyślnej automatycznej inkrementacji klucza głównego. Gdy zacząłem go sam wyliczać i podawać bezpośrednio wydajność wzrosła niesamowicie. Jeszcze nie wiem czy partycje będą teraz konieczne.
Gdyby ktoś szukał zostawię to tutaj dla potomnych (PostgreSQL 10):

Utworzenie tabeli:

create table tx
( id bigint
, block integer
, txid bytea
, n smallint
)
partition by list(get_byte(txid, 0));

Output SQL dla tworzonych partycji i indeksów:

do $$begin
for i in 0 .. 255 loop
raise notice '%', format('create table %s_%s partition of %1$s for values in (%3$s);', 'tx', lpad(upper(to_hex(i)), 2, '0'), i);
raise notice '%', format('alter table %s_%s