daten kopieren vernüpfen zwischen 2 serverund 2 verschiedenen tabellen

hallo erstmal folgendes problem besteht immer noch ich muss eine spalte aus einer tabelle kopieren und in eine andere tabelle kopieren (verknüpfen) diese tabelle liegt natürlich nicht auf dem selben server !!!wer kann mir helfen???

das skript sieht ungefähr so aus

#!/bin /sh

server1=xxx
user1=xxx
pw=xxx

server2=xxx
user2=xxx
pw2=xxx


echo"temporäre tabelle auf server1 anlegen"

sqsh w-2000 -S$server1 -U$user1 -P$pw <"$dir_daten$datei"
use sever1
go
set nocount on
go
create table #temp_E1_p
(
E1 char(6) null,
fx char(6) null
)
go
insert into #temp_E1_p
select
E1=substring(a.bemerkung,charindex("(",a.bemerkung )+1,1),
fx= “f” +b.ne_typ+b.ne_code
from fv_mass a,fv_funkel b,fv_termine c
where a.id_funkel=b.id_funkel
and a.id_mass=c.id_mass
and a.kategorie like"E1_Extension"
and c.Ist_tch_in_Sv=null

\bcp -S$server2 -U$user2 -P$pw2 server2…(???)

go
END
echo “ausgabefile:”
sqsh -w2000 -S$server2 -U$user2 -P$pw2<"$dir_daten$datei"
use server2
select * from #temp_E1_p
go
end
echo"ausgabefile
exit"

Zeilenumbrüche aller 8cm erhöhen die Lesbarkeit deutlich. Zu multiplen Satzzeichen sage ich jetzt mal nix.


das skript sieht ungefähr so aus

Aha. Ungefähr so also. Dann sag ich Dir, wie das ungefähr gehen könnte.

  • Du erstellst eine Tabelle von der Quelltabelle, die dessen PK und die zu kopierende Spalte enthält. Bzw., keine Tabelle, sondern einen VIEW.
  • mittels COPY kopierst Du das in ein file
  • dieses File trägst Du zum neuen Server
  • dort einlesen in eine temp. Tabelle
  • die Zieltabelle um die Spalte erweitern
  • mittels UPDATE diese Spalten füllen

Zu Deinem Script:

#!/bin /sh

server1=xxx
user1=xxx
pw=xxx

server2=xxx
user2=xxx
pw2=xxx


echo"temporäre tabelle auf server1 anlegen"

sqsh w-2000 -S$server1 -U$user1 -P$pw <“$dir_daten$datei”

Nach kurzer Gugelei scheint Dein sqsh ein Tools für Sybase zu sein. Das KANN also nicht funktionieren, da wir hier PostgreSQL haben. Von weiteren Fehlern mal ganz abgesehen…

Btw.: Code kann man auch schöner hier reinkippen.


Andreas

Danke erstmal für die antwort das problem ist in diesem Fall das ich aber nur die Daten bis Dato dann kopiert habe es kommen aber täglich neue datensätze hinzu deswegen will ich ja ein skript schreiben das einmal am tag die daten von der einen tabelle holt und in der neuen tabelle hinzufügt bzw. updated!!!

An welcher Stelle meiner Antwort siehst Du da ein Problem?

Andreas

das problem ist ,wenn die tabelle kopiert wird sind die daten nur bis zu dem kopier vorgang inder View enthalten und ich müsste die daten dann manuel immer wieder kopieren und neu einfügen :confused :astonished: der nicht?

Ja. Und die Lösung des Problems erlaube ich mir von Dir zu zitieren:

deswegen will ich ja ein skript schreiben das einmal am tag die daten von der einen tabelle holt und in der neuen tabelle hinzufügt bzw. updated!!!!

Die Antwort auf die Frage, ob Du wirklich PG verwendest, schuldest Du noch immer.

Andreas

Ich will mal nicht so sein. Hier ein Script, welches eine Tabelle auf eine andere abbildet.
Dabei läuft alles auf dem selbern Server und DB ab, aber das sind Aufrufparameter, die man leicht ändern kann.
Natürlich müßte man bei 2 unterschiedlichen Servern die Datei noch rübertragen, aber SCP wurde zum Glück schon erfunden.

kretschmer@apache-new:~$ cat demo.sh
#!/bin/sh

psql -h localhost test -c "create table source (id int primary key, name text)"
psql -h localhost test -c "create table destination (id int primary key, name text)"

# nun source fuellen
psql -h localhost test -c "insert into source values (1,'foo')"


# nun der Transfer

psql -h localhost test -c "copy source(id, name) to '/tmp/transfer.copy' csv"

psql -h localhost test -c "create table transfer(id int, name text)"
psql -h localhost test -c "copy transfer from '/tmp/transfer.copy' csv"
psql -h localhost test -c "update destination set name=(select name from transfer) where id=id"
psql -h localhost test -c "insert into destination select id, name from transfer where id not in (select id from destination)"

psql -h localhost test -c "select * from destination"

kretschmer@apache-new:~$

Anwendung:

kretschmer@apache-new:~$ ./demo.sh
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "source_pkey" for table "source"
CREATE TABLE
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "destination_pkey" for table "destination"
CREATE TABLE
INSERT 0 1
COPY 1
CREATE TABLE
COPY 1
UPDATE 0
INSERT 0 1
 id | name
----+------
  1 | foo
(1 row)

Davon abgesehen, man könnte dafür auch eine Replizierungslösung a la Slony verwenden.


Andreas

achso , mit Sybase war es schon ziemlich gut beschrieben

also ich muss mich wirklich für die ganze mühe ausserordentlich bedanken !!! :smiley: :slight_smile: das mit dem kopieren habe ich jetzt nach längeren hin und her hin bekommen es funkt alles soweit jetzt muss ich nur noch die tabelle updaten !!!
da hängt es mal wieder nach dem bcp vom server1 auf server2 ignoriert der rechner alles er gibt noch nicht mal ein kommentar aus(echo “hallooo”)!!! :confused:

Netzwerk Forum - Multiple Satzzeichen
Plenk – Wikipedia

Ansonsten, welche Zeile in meinem Script hast Du nicht verstanden? Ist es die mit dem Update?

da hängt es mal wieder nach dem bcp vom server1 auf server2 ignoriert der rechner alles er gibt noch nicht mal ein kommentar aus(echo “hallooo”)!!! > :confused: >

Das ist natürlich bitter.


Andreas