Also das funktioniert:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use strict;
use warnings;
use DBI;
my $dbname='xxx';
my $user='anonymous';
my $pass='???';
my $dbh = DBI->connect("dbi:Pg:dbname=$dbname", $user, $pass, {RaiseError => 1, AutoCommit => 1}) or die $DBI::errstr;
my $cname='nur-ein-test';
$cname=~/"/""/gs;
$dbh->do(qq'CREATE TABLE test (
"$cname" text,
datum date,
id int
)');
$dbh->disconnect();
Wichtig ist hier, dass der Spaltenname in doppelten Anführungszeichen steht steht. Sei aber vorsichtig, von wo du den Spaltennamen übernimmst. Man kann einigen Unsinn anstellen, wenn ungeprüft in die DB geschrieben wird.
Ich halte es für eine Fehlplanung der DB, wenn automatisiert neue Tabellen anlegt werden, das lässt sich auch anders lösen.