Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 12/05/2017 12:42:00
- Michel Depiesse
- Membre
\copy sur linux et sur windows
Bonjour;
J'ai un script export_csv.sql qui contient des commandes \copy ... afin de produire des csv.
Quand je joue ce script sur Linux, tout va bien.
Mais quand je le joue sur Windows; je reçois le message :
psql:export_csv.sql:1: invalid command : \
psql:export_csv.sql:1: ERROR : syntax error at or near "y_"
LINE 1: "y_"
Il s'agit d'un y avec deux points dessus.
Mais si je copy/paste la ligne du fichier sql en psql, la commande s'éxecute sans problème.
Que faire ?
Merci pour votre attention
Hors ligne
#2 12/05/2017 12:58:36
- rjuju
- Administrateur
Re : \copy sur linux et sur windows
Peut-être un problème entre le format des fichiers linux et windows. Pouvez-vous essayer de convertir votre script avec unix2dos avant de l'exécuter ? Ou alors un problème de BOM / utfX ? Quel est l'encodage utilisé pour le fichier ?
Julien.
https://rjuju.github.io/
Hors ligne
#3 12/05/2017 14:20:16
- Michel Depiesse
- Membre
Re : \copy sur linux et sur windows
Merci pour votre réponse
C'est un script que j'ai généré par un script en VBA :
Option Compare Database
Private Sub sync_local_data_to_server_Click()
Dim rs As DAO.Recordset
Dim fso As Object
Dim date_today As String
Dim path4csv As String
Dim path4psql As String
Dim export_csv_file As Object
Dim stmt As String
Dim hProcess As Long
Dim user2sync As String
path4csv = "D:\Users\Ariel\sync\files2send\"
path4psql = "C:\Programs\PostgreSQL\9.5\bin\"
Set fso = CreateObject("Scripting.FileSystemObject")
user2sync = Forms("send_sync2server")!user2sync
'
' delete old export_csv.sql
'
With fso
If .FileExists(path4csv & "export_csv.sql") Then
.DeleteFile path4csv & "export_csv.sql"
End If
End With
'
' create new export_csv.sql
'
Set export_csv_file = fso.CreateTextFile(path4csv & "export_csv.sql", True, True)
'
' write line for audit_history
'
stmt = "\copy (select table_name, operation, audit_id, user_name, audit_date, sync_status from public.audit_history) to '" _
& path4csv _
& "audit_history.csv' with csv header;"
export_csv_file.WriteLine stmt
export_csv_file.WriteLine ""
'
' write lines for tables
'
Set rs = CurrentDb.OpenRecordset("select distinct table_name from audit_history")
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Do Until rs.EOF = True
stmt = "\copy (select * from " _
& Chr(34) _
& rs!table_name _
& Chr(34) _
& " ) where audit_id in (select audit_id from public.audit_history where table_name = " _
& "'" _
& rs!table_name _
& "'" _
& ")) to '" _
& path4csv _
& rs!table_name _
& ".csv' with csv header;"
export_csv_file.WriteLine stmt
export_csv_file.WriteLine ""
rs.MoveNext
Loop
End If
export_csv_file.Close
'
' call pg to run to export_csv.sql
'
stmt = Chr(34) & path4psql & "psql -U rubin " & " -f " & path4csv & "export_csv.sql" & " contacts" & Chr(34)
MsgBox (stmt)
hProcess = Shell(stmt, vbNormalFocus)
MsgBox ("Sync files produced")
'
' send the csv's to pg server
'
'fso.CopyFile path4csv & "*.csv", "\\192.168.1.160\sync\" & user2sync & "\"
fso.CopyFile path4csv & "*.csv", "Z:\" & user2sync & "\"
End Sub
Ce qui est étonnant, c'est que les commandes qui sont dans le fichier, je peux les exécuter en les copy/paste dans psql. Mais elles donnent un message d'horreur quand je cherche à les exécuter par -f export_csv.sql ou \i export_csv.sql.
J'en perds mon latin
Hors ligne
#4 12/05/2017 14:52:23
- Michel Depiesse
- Membre
Re : \copy sur linux et sur windows
Résolu !
Set export_csv_file = fso.CreateTextFile(path4csv & "export_csv.sql", True, False)
au lieu de
Set export_csv_file = fso.CreateTextFile(path4csv & "export_csv.sql", True, True)
Sinon, le fichier était en UNICODE
Merci et bon week-end.
Hors ligne
Pages : 1