Zeile kopieren in gleiche Tabelle

Hallo folgendes wollte ich tun

INSERT INTO table_test ( SELECT * FROM table_test where id = 1);

Dies funktioniert nicht, oder darf gar nicht funktionieren, wegen dem Unique Constraint auf id.

Ich bräuchte jetzt eine Möglichkeit mit der ich sagen kann

INSERT INTO table_test ( SELECT * OHNE ID FROM table_test where id = 1);

ODER

INSERT INTO table_test ( SELECT * FROM table_test where id = 1 AND nicht ID);

table_test.id fällt flach, weil ich über verschiedenen Tabellen gehe die ähnlich aufgebaut sind und ich einfach nicht alle table_test.spalten selektieren möchte mit einer Schleife.
Irgendwie wollte ich einen ein Zeiler.

So etwas halt wo ich sagen kann SELECT alle spalten nur nicht id FROM wäre toll. :slight_smile:

Wieso machst du nicht einfach:

INSERT INTO table (SELECT X, feld2, feld3, feld4, … FROM table WHERE id = 1);

Das X ersetzt du durch eine neue ID bzw. einen Next-Val und fertig.

cu tb.

Daran habe ich auch gedacht z.B. so

INSERT INTO test
(
SELECT
( SELECT column_name FROM information_schema.columns WHERE table_name =‘test’ and column_name NOT LIKE ‘id’ )
FROM test where id = 1
);

Also selektiere alles außer id und mach ein INSERT INTO test

hat leider nicht funktioniert.

Sorry natürlich ist es so richtig,

INSERT INTO test VALUES
( DEFAULT,
(
SELECT (
SELECT column_name FROM information_schema.columns WHERE table_name =‘test’ and column_name NOT LIKE ‘id’
)
FROM test where id = 1
)
);

Das Problem ist nun, dass ich den Result der column_name halt nicht an SELECT übertragen kann. Schade

Sowas ist IIRC im SQL nicht vorgesehen. Andererseits gilt es als guter Stil, in selects alle zu selektierenden Spalten anzugeben. Du verstehst, was ich meine?

So etwas halt wo ich sagen kann SELECT alle spalten nur nicht id FROM wäre toll. > :slight_smile: >

[/quote]

Du könntest Dir in einer Funktion aus information_schema alle Spaltennamen holen, daraus ein dynamisches SQL basteln und das mit EXECUTE ausführen. Andererseits weiß ich nicht, für was man sowas braucht. Falls das Ziel ist, einfach nur eine bestimmte Anzahl gleicher Records in eine Tabelle einzufügen, wäre generate_series() vielleicht was für Dich, aber wie gesagt, ich weiß nicht, was Du willst.

Andreas

Ich wollte auf die schnelle eine Zeile innerhalb der selben Tabelle kopieren und dem neuen Eintrag halt eine neue ID geben.Sonnst ginge es ja mit der INSERT INTO methode nicht.

Ich sehe, aber das ich ne PL/PGSQL proggen muss. Bin auch fast fertig damit.
Danke nochmal, an alle