""" A quick and rough performance comparison of text vs. binary Decimal adaptation """ from random import randrange from decimal import Decimal import psycopg from psycopg import sql ncols = 10 nrows = 500000 format = psycopg.pq.Format.BINARY test = "copy" def main() -> None: cnn = psycopg.connect() cnn.execute( sql.SQL("create table testdec ({})").format( sql.SQL(", ").join( [ sql.SQL("{} numeric(10,2)").format(sql.Identifier(f"t{i}")) for i in range(ncols) ] ) ) ) cur = cnn.cursor() if test == "copy": with cur.copy(f"copy testdec from stdin (format {format.name})") as copy: for j in range(nrows): copy.write_row( [Decimal(randrange(10000000000)) / 100 for i in range(ncols)] ) elif test == "insert": ph = ["%t", "%b"][format] cur.executemany( "insert into testdec values (%s)" % ", ".join([ph] * ncols), ( [Decimal(randrange(10000000000)) / 100 for i in range(ncols)] for j in range(nrows) ), ) else: raise Exception(f"bad test: {test}") if __name__ == "__main__": main()