sql >> Database >  >> RDS >> PostgreSQL

Waarom kan ik geen variabele gebruiken in een postgres backslash-opdracht (\COPY)

Over het algemeen werkt variabele substitutie met meta-commando's (beginnend met backslash), maar \copy is een uitzondering, zoals gedocumenteerd in de manpage van psql :

Ik ben het niet eens met de opmerking van @BaconBits op de vraag dat plpgsql's EXECUTE zou het antwoord kunnen zijn. Een server-side statement, dynamisch of anderszins, heeft geen toegang tot het client-side bestandssysteem, in tegenstelling tot \copy . U mag COPY . gebruiken in plaats daarvan, maar het moet superuser zijn en dat bestand moet toegankelijk zijn voor de postgres gebruiker op de server.

Ik geloof dat om \copy van een variabele bestandsnaam, moet de variabele in het script worden geïnjecteerd vóór psql leest het. Je zou het SQL-script in een shellscript kunnen integreren en het aan psql . kunnen geven als een patchbare here-string, of filter het door sed of perl of een vergelijkbare unix-achtige methode.




  1. PHP Als else-statement dat een databaserecord leeg is, wordt een standaardafbeelding weergegeven

  2. Tel verschillende waarden

  3. Oracle-verbindingen verbroken in SSIS na het verwijderen van de 32-bits versie van de Oracle-client

  4. PostgreSQL:UPDATE met behulp van de aggregatiefunctie