sql >> Database >  >> RDS >> PostgreSQL

Hoe kopieer ik een json-bestand naar postgres?

Uiteindelijk gebruikte ik Andre Dunstan's blog en dit ZO antwoord die zegt dat de json op een specifieke manier moet worden geformatteerd om de kopieeropdracht te gebruiken.

Omdat mijn structuur behoorlijk gedefinieerd is voor de bestanden die ik aan het ontleden ben, eindigde ik met het volgende script.

def file_len(fname):
    # to find the number of lines in the file.
    # Has been pretty efficient even for millions of records
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

INPUTFILE = '/path/to/input.json'
OUTPUTFILE = '/path/to/output.json.csv'
LEN = file_len(INPUTFILE)
with open(OUTPUTFILE, 'w') as fo:
    with open(INPUTFILE, 'r') as fi:
        for i, l in enumerate(fi):
            # I skip the first line
            if i == 0: continue 
            
            # To remove the ']}}' from the end
            elif i+1 == LEN: _ = fo.write(l[:-3])
            
            # To remove the ',' from the end 
            # and add \n since write does not add newline on its own
            else: _ = fo.write(l[:-2]+'\n') 

# load statement

import sqlalchemy
POSTGRESQL = f'postgresql+psycopg2://{USERNAME}:{PASSWORD}@{HOSTNAME}/{DB}'
engine = sqlalchemy.create_engine(POSTGRESQL, echo=True)
            
con = engine.connect()
trans = con.begin()
LOAD_SQL = f"COPY tablename from '{OUTPUTFILE}' with csv delimiter E'\x01' quote E'\x02' null as '';"
try:
    con.execute(LOAD_SQL)
    trans.commit()
except Exception as e:
    trans.rollback()
finally:
    con.close()



  1. Meerdere rijen in een enkele rij en combineer kolom SQL

  2. Postgresql JSONB komt eraan. Wat nu te gebruiken? Hwinkel? JSON? EAV?

  3. Hoe kan ik een volledige lijst krijgen van alle query's die momenteel op mijn MySQL-server worden uitgevoerd?

  4. Is er een manier om te selecteren zonder vergrendeling in MySQL te veroorzaken?