Skip to content

Instantly share code, notes, and snippets.

@rg3915
Last active November 5, 2019 13:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rg3915/5895a9d9edc32e205f0c54d10a76c96b to your computer and use it in GitHub Desktop.
Save rg3915/5895a9d9edc32e205f0c54d10a76c96b to your computer and use it in GitHub Desktop.
Inserindo 14000605 registros no PostgreSQL com Just Python
cat > produtos.csv << EOF
produto
Apontador
Caderno 100 folhas
Caderno capa dura 200 folhas
Caneta esferográfica azul
Caneta esferográfica preta
Caneta esferográfica vermelha
Durex
Giz de cera 12 cores
Lapiseira 0.3 mm
Lapiseira 0.5 mm
Lapiseira 0.7 mm
Lápis de cor 24 cores
Lápis
Papel sulfite A4 pacote 100 folhas
Pasta elástica
Tesoura
Agasalho de moleton
Arquivador de 40 mm
Base para tinta
Bloco de papel cavalinho A4
Borracha
Borracha branca
Caderno de música
Caderno pautado
Caderno quadriculado
Cadernos pautados
Calculadora
Calculadora não gráfica com funções trigonométricas
Calções
Camiseta
Capa arquivadora de desenhos A3
Chinelos de banho
Compasso
Conjunto de guaches
Corretor de fita
Esferográficas azul
Esferográficas preta
Esferográficas verde
Esferográficas vermelha
Esquadro de 45º
Estojo
Fato de treino
Flauta de bisel
Lápis (H HB B e 6B)
Lápis de cera
Lápis de cor
Lápis HB
Marcadores
Mochila
Pano de limpeza
Pen drive
Pincel n. 2
Pincel n. 8
Produtos de higiene
Régua de 20 cm
Régua de 50 cm
Saco para o equipamento
Sapatilhas de desporto
Stick de cola
Toalha
Transferidor
Tubo de cola
EOF
cat produtos.csv
import subprocess
import timeit
# Cria db
subprocess.call("createdb -U postgres estoque", shell=True)
# Cria tabela
create_table_sql = "CREATE TABLE produtos (id SERIAL PRIMARY KEY, produto VARCHAR(100));"
create_table_psql = f'psql -U postgres -c "{create_table_sql}" estoque'
subprocess.call(create_table_psql, shell=True)
# Insere os dados
filename = '/tmp/produtos.csv' # ou produtos_14000605.csv
copy_sql = f"COPY produtos (produto) FROM '{filename}' CSV HEADER;"
copy_psql = f'psql -U postgres -c "{copy_sql}" estoque'
tic = timeit.default_timer()
subprocess.call(copy_psql, shell=True)
toc = timeit.default_timer()
print(round(toc - tic, 2), 'segundos')
# 84.77 segundos # para 14000605
# Retorna os dados
select_sql = "SELECT * FROM produtos LIMIT 5;"
select_psql = f'psql -U postgres -c "{select_sql}" estoque'
subprocess.call(select_psql, shell=True)
# Contando os registros
count_sql = "SELECT COUNT(*) FROM produtos;"
count_psql = f'psql -U postgres -c "{count_sql}" estoque'
subprocess.call(count_psql, shell=True)
# https://github.com/juliano777/pgsql_fs2w
# Entrando como usuário postgres
sudo su - postgres

# Entrando no banco
psql

Truquezinho

show data_directory;

vim /etc/postgresql/10/main/pg_hba.conf

Trocar pra local all postgres trust

sudo systemctl reload postgresql

psql -U postgres

CREATE DATABASE estoque;

\c estoque

\l

\dt

dropdb estoque

createdb estoque
psql estoque
GRANT ALL PRIVILEGES ON DATABASE estoque TO postgres;
\l

CREATE TABLE produtos (id SERIAL PRIMARY KEY, produto VARCHAR(100));
\dt

INSERT INTO produtos (produto) VALUES ('Caneta'), ('Caderno'), ('Papel Sulfite A4');

# Zerar tabela
estoque=# TRUNCATE produtos restart identity;
import csv
import string
import timeit
from random import choice
def gen_digits(max_length):
return str(''.join(choice(string.ascii_letters) for i in range(max_length)))
def write_csv(filename, max_rows, max_digits):
with open(filename, 'w') as f:
csv_writer = csv.writer(f)
csv_writer.writerow(['produto'])
for i in range(max_rows):
csv_writer.writerow([gen_digits(max_digits)])
max_rows = 100
filename = f'/tmp/produtos_{max_rows}.csv'
max_digits = 72
tic = timeit.default_timer()
write_csv(filename, max_rows, max_digits)
toc = timeit.default_timer()
print(round(toc - tic, 2), 'segundos')
# 1977.56 segundos # para 14000605
print(round((toc - tic)/60, 2), 'minutos')
# 32.96 minutos # para 14000605
@rg3915
Copy link
Author

rg3915 commented Nov 5, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment