Spalte mit statischen Wert

Hallo Zusammen,

ich übertrage gerade alte Projekte von meinem Microsoft SQL-Server auf den neuen Postgre-SQL-Server.

Dabei bin ich auf folgendes Problem gestoßen.

Im Microsoft SQL-Server konnte man über die Syntax ‘Inhalt’ as Test den Wert Inhalt einfach in die Spalte Test einfügen.

Dieses Vorgehen funktioniert leider nicht unter Postgresql.

Hat dazu jemand eine Lösung?

Vielen Dank im Voraus.

Schreib doch bitte wie du genau vorgehst. Ich zumindest kann mir im Moment nicht so richtig vorstellen was du machst.

Viele Grüße

Uwe

drop table if exists work.email_alle_datei;
create table work.email_alle_datei as
select
work.email_alle.e_mail,
work.email_alle.vorname,
work.email_alle.name,
work.email_alle.plz as zip,
work.email_alle.strasse as street1,
’ ’ as street2,
work.email_alle.ort as city,
‘DEU’ as country,
’ ’ as company,
‘1’ as targetgroup
from
work.email_alle
;

Leider werden bei den Spalten street2, country, company und targetgroup die Werte nicht in die Tabelle übertragen.

Das sieht gut aus. Die Werte werden bei mir übertragen:

http://sqlfiddle.com/#!15/d2f8c/1

Ich verstehe immer noch nicht was du für Werte erwartest?
Das Problem ist das PostgreSQL nicht weiß welcher Datentyp es sein soll, und du dann mit diesen Spalten nicht weiterarbeiten kannst.

Beispiel:

# create table test as select relname, '' street2 from pg_class;
WARNUNG:  Spalte „street2“ hat Typ „unknown“
DETAIL:  Relation wird trotzdem erzeugt.
SELECT 311
Zeit: 129,337 ms
# \d test
     Tabelle „public.test“
 Spalte  |   Typ   | Attribute
---------+---------+-----------
 relname | name    |
 street2 | unknown |

WARNUNG: Spalte „street2“ hat Typ „unknown“

Also entweder nur das

create table .. as select ...

mit den vorhandenen Spalten ausführen. Und die zusätzlichen Spalten per

alter table ... add street2 varchar(100)

hinzufügen.

Oder zuerst die Tabelle sauber definieren. Und dann mit einem

insert into test ( relname, street2) select relname, null from pg_class;

die Daten importieren.

Das müsste sich ja mit einem einfache cast fixen lassen, oder?

create table test as select relname, ''::text street2 from pg_class;

ja funktioniert. Ich würde aber null anstelle von ‘’ verwenden. Da der Inhalt ja noch nicht definiert ist.
Bspw:

create table test as select relname, null::varchar(100) street2 from pg_class;

suchst di sowas?

test=# create table blubb as select ''::text as val, 3::int as i, NULL::date as datum;
SELECT 1
test=*# \d blubb
     Table "public.blubb"
 Column |  Type   | Modifiers
--------+---------+-----------
 val    | text    |
 i      | integer |
 datum  | date    |

test=*# select * from blubb;
 val | i | datum
-----+---+-------
     | 3 |
(1 row)

test=*# rollback;
ROLLBACK
test=#