sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur exporterar man fulltextfiler med SQL?

COPY är inte avsedd för detta. Det är tänkt att hantera tabellstrukturerade data, så det kan inte fungera utan något sätt att dela upp rader och kolumner; det kommer alltid att finnas några tecken som COPY FROM tolkas som separatorer, och för vilka COPY TO kommer att infoga någon escape-sekvens om den hittar en i dina data. Det här är inte bra om du letar efter en allmän fil-I/O-funktion.

Faktum är att databasservrar inte är designade för allmän fil I/O. För det första, vad som helst som interagerar direkt med serverns filsystem kräver en superanvändarroll. Om det alls är möjligt bör du bara fråga tabellen som vanligt och hantera filens I/O på klientsidan.

Som sagt, det finns några alternativ:

  • Den inbyggda pg_read_file() funktion och pg_file_write() från adminpack modul, ger det mest direkta gränssnittet till filsystemet, men de är båda begränsade till klustrets datakatalog (och jag skulle inte rekommendera att lagra slumpmässiga användarskapade filer där).
  • lo_import() och lo_export() är de enda inbyggda funktioner jag känner till som direkt handlar om fil-I/O och som har obegränsad åtkomst till serverns filsystem (inom de begränsningar som värdoperativsystemet ställer), men Large Object-gränssnittet är inte speciellt användarvänligt ....
  • Om du installerar den opålitliga varianten av ett procedurspråk som Perl (plperlu ) eller Python (plpythonu ), kan du skriva omslagsfunktioner för det språkets ursprungliga I/O-rutiner.
  • Det finns inte mycket du inte kan åstadkomma med COPY TO PROGRAM om du är tillräckligt beslutsam - för en, kan du COPY (SELECT 1) TO PROGRAM 'mv <source_file> <target_file>' för att kringgå begränsningarna för pg_file_write() - även om detta suddar ut gränsen mellan SQL och externa verktyg något (och den som ärver din kodbas kommer förmodligen inte att bli imponerad...).


  1. Är det möjligt att ladda en databas i RAM-minnet?

  2. postgresql generera sekvens utan mellanrum

  3. MySQL 5.7 returnerar alla kolumner i tabellen baserat på distinkt kolumn

  4. Dapper - ring Oracle schema.package.function