2011-10-11 161 views
0

我只想将我的应用程序从MYSQL迁移到PostgreSQL。我卡在一点,从MYSQL迁移到PostgreSQL

CREATE TABLE some_table 
(
    sequenceNumOnTarget  BIGINT NOT NULL, 
    streamStartTime   BIGINT, 
    intervalStartTime   BIGINT NOT NULL, 
    intervalNumber    SMALLINT, 
    intervalDuration   INTEGER, 
    lastReport     TINYINT, 
    macAddr     VARCHAR(20) NOT NULL, 
    directoryNumber   VARCHAR(30), 
    subnetMask     VARCHAR(20), 
    subnetAddress    VARCHAR(20), 
    ipAddress     VARCHAR(20), 
    icpName     VARCHAR(20), 
    udpPort     INTEGER NOT NULL, 
    tcpPort     INTEGER, 
    endpointContext   SMALLINT, 
    endpointType    SMALLINT, 
    farEndIpAddress   VARCHAR(20), 
    farEndMacAddr    VARCHAR(20), 
    farEndDirectoryNumber  VARCHAR(30), 
    farEndUdpPort    INTEGER, 
    farEndTcpPort    INTEGER, 
    farEndType     SMALLINT, 
    farEndSubnet    VARCHAR(20), 
    farEndIcpName    VARCHAR(20), 
    codec      SMALLINT, 
    packetsReceived   BIGINT, 
    DELAY INTEGER, 
    jitterRfc1889    INTEGER, 
    averageJitter    INTEGER, 
    jitterHist0    INTEGER, 
    jitterHist1    INTEGER, 
    jitterHist2    INTEGER, 
    jitterHist3    INTEGER, 
    jitterHist4    INTEGER, 
    jitterHist5    INTEGER, 
    jitterHist6    INTEGER, 
    jitterHist7    INTEGER, 
    jitterBufferOverflow  BIGINT, 
    jitterBufferUnderflow  BIGINT, 
    jitterBufferAverageDepth INTEGER, 
    jitterBufferMaxDepth  INTEGER, 
    packetLoss     BIGINT, 
    packetLossMaxBurst   BIGINT, 
    packetLossHist0   INTEGER, 
    packetLossHist1   INTEGER, 
    packetLossHist2   INTEGER, 
    packetLossHist3   INTEGER, 
    packetLossHist4   INTEGER, 
    packetLossHist5   INTEGER, 
    packetLossHist6   INTEGER, 
    packetLossHist7   INTEGER, 
    packetsOutOfOrder   BIGINT, 
    maxJitter     BIGINT, 
    networkMos     INTEGER, 
    userMos     INTEGER, 
    pollId      BIGINT, 
    instance     VARCHAR(100), 
    ttime      BIGINT NOT NULL, 
    PRIMARY KEY (sequenceNumOnTarget,macAddr,udpPort), 
    INDEX vq_subnet(subnetAddress), 
    INDEX vq_ttime(ttime), 
    INDEX vq_pollid(pollId), 
    INDEX vq_sequence(sequenceNumOnTarget), 
    INDEX vq_icp(icpName) 
); 

这是我在MySQL中的表定义,现在我想将它转换为PostgreSQL。

但是在PostgreSQL中找不到适合'用一个查询创建表和索引'的DDL语句。

任何人都可以帮助..

+0

* PostgreSQL * not PostGreSQL;) – veritas

回答

5

我不相信你可以添加索引为PostgreSQL中CREATE TABLE语句的一部分(不是那些隐式创建强制执行UNIQUE和PRIMARY KEY约束等)。

然而,并不需要这样做。如果你想确保索引是在任何人看到(并因此使用)表之前创建的,那么只需在单个事务中创建表和索引,并且只有在准备好使用表时才提交事务。

这在MySQL中不起作用,因为架构更改发生在任何事务之外,即使使用通常支持它们的引擎。它应该在PostgreSQL中工作。

+0

关于在单个事务中创建表和索引的好处 –

0

如果您可以将表达式拆分为单独的表达式以进行创建和索引定义,则迁移应该很简单。

+0

不,我不能在应用程序中只有一个参数可以在函数中传递,此参数是一个字符串,它包含此查询和更多其他依赖关系。 – Stuti