Wykorzystanie COPY FROM STDIN w postgresie

14

Właśnie zacząłem używać Postgres i próbuję utworzyć przykładową bazę danych, aby zrozumieć jej funkcje, rozglądając się, znalazłem kilka skryptów na pgfoundry.org. Rozumiem polecenia, ponieważ wcześniej korzystałem zarówno z Oracle, jak i MS-SQL, ale wszystkie uruchamiane przeze mnie skrypty zwracają błędy, gdy dotrą do instrukcji „COPY FROM”. Dokładniej, błąd jest zgłaszany przy pierwszym elemencie, który powinien zostać wstawiony do podanej tabeli.

Próbowałem uruchamiać skrypty zarówno jako zapytania, jak i pgScript, ale w obu przypadkach pojawia się błąd w pierwszym wierszu po KOPIOWANIU Z.

Używam pgAdminIII i użyłem StackBuilder do zainstalowania PostgreSQL 9.2.4.1 jako sterownika DB. Czy mogę pominąć podstawową konfigurację, która uniemożliwia mi uruchomienie tego polecenia, lub po prostu nie rozumiem, jak to działa?

EDYCJA:
Błąd to:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

gdzie jest tekst:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`
Eugenio Laghi
źródło
1
Witamy w dba.SE. Do tego typu pytania należy dołączyć (dosłownie) komunikat o błędzie. Jeśli twoje ustawienia narodowe nie są w języku innym niż angielski, możesz je zresetować w sesji przed uruchomieniem skryptu, aby uzyskać domyślne komunikaty o błędach w języku angielskim: SET lc_messages = CPo prostu uruchom go w oknie edytora SQL, który „zawiera” sesję.
Erwin Brandstetter,
Dzięki, próbuję wymyślić, jak zmienić moje ustawienia regionalne, dołączę komunikat o błędzie, gdy tylko wymyślę, jak to zrobić.
Eugenio Laghi,
1
Ach, zapomniałem, apostrofów: SET lc_messages = 'C'.
Erwin Brandstetter,

Odpowiedzi:

10

pgScript to lokalne rozszerzenie skryptu pgAdmin, którego najprawdopodobniej nie chcesz tutaj.

pgAdmin to GUI, a nie aplikacja konsolowa - nie ma takiej, stdinktórej można łatwo użyć. Jeśli chcesz stdinprzesyłać strumieniowo zawartość, użyj psql, który jest aplikacją konsolową - z \copymeta-komendą psql .

Jeśli masz plik (co oczywiście robisz), po prostu użyj SQL COPYz pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

Plik musi być czytelny dla postgresużytkownika systemu.

Więcej informacji w tym ściśle powiązanym żądaniu z listą wsparcia pgAdmin .

Erwin Brandstetter
źródło
ok, to znaczy powinien uruchomić skrypt z linii takich jak: psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql? Poza tym próbuję wszystkiego lokalnie, właśnie zainstalowałem pgAdmin na swoim laptopie.
Eugenio Laghi,
1
@EugenioLaghi: Niezupełnie. psql -fwykona plik skryptu SQL. Wygląda na to, że masz do czynienia z plikiem danych . Zaktualizowałem swoją odpowiedź.
Erwin Brandstetter,
DZIĘKI! Na początku próbowałem wykonać skrypt, ale teraz przynajmniej wymyśliłem, jak KOPIOWAĆ dane z pliku! Wczoraj wieczorem byłem po prostu zbyt zmęczony, by zrozumieć ... :)
Eugenio Laghi
W jaki sposób upewniam się, że użytkownik postgres może odczytać plik. Zrobiłem to dla pliku txt, nawet dla mojego pulpitu (gdzie plik się znajduje), ale pozwolenie wciąż jest odmawiane.
@Geo: Rozpocznij nowe pytanie, w tym wersję Postgres, system operacyjny, gdzie znajduje się plik, użyte polecenie dosłowne i więcej, jeśli to konieczne ...
Erwin Brandstetter