X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Flibs%2Frdbms%2Fdatabase%2FDatabasePostgres.php;h=94509a3c023ace981ca16d42bdbae0b58624cacf;hb=669a21a925ca4b30f850905806c08dbd82ecf03d;hp=525d308e9aa4bac61e18ede550bd9a4c74bd7c5d;hpb=396cc2a5fd18db19ddced12da66353be212776cc;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/libs/rdbms/database/DatabasePostgres.php b/includes/libs/rdbms/database/DatabasePostgres.php index 525d308e9a..94509a3c02 100644 --- a/includes/libs/rdbms/database/DatabasePostgres.php +++ b/includes/libs/rdbms/database/DatabasePostgres.php @@ -640,6 +640,18 @@ __INDEXATTR__; return true; } + protected function makeUpdateOptionsArray( $options ) { + if ( !is_array( $options ) ) { + $options = [ $options ]; + } + + // PostgreSQL doesn't support anything like "ignore" for + // UPDATE. + $options = array_diff( $options, [ 'IGNORE' ] ); + + return parent::makeUpdateOptionsArray( $options ); + } + /** * INSERT SELECT wrapper * $varMap must be an associative array of the form [ 'dest1' => 'source1', ... ] @@ -789,7 +801,9 @@ __INDEXATTR__; $newNameE = $this->addIdentifierQuotes( $newName ); $oldNameE = $this->addIdentifierQuotes( $oldName ); - $ret = $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " TABLE $newNameE " . + $temporary = $temporary ? 'TEMPORARY' : ''; + + $ret = $this->query( "CREATE $temporary TABLE $newNameE " . "(LIKE $oldNameE INCLUDING DEFAULTS INCLUDING INDEXES)", $fname ); if ( !$ret ) { return $ret; @@ -812,7 +826,7 @@ __INDEXATTR__; $fieldE = $this->addIdentifierQuotes( $field ); $newSeqE = $this->addIdentifierQuotes( $newSeq ); $newSeqQ = $this->addQuotes( $newSeq ); - $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " SEQUENCE $newSeqE", $fname ); + $this->query( "CREATE $temporary SEQUENCE $newSeqE OWNED BY $newNameE.$fieldE", $fname ); $this->query( "ALTER TABLE $newNameE ALTER COLUMN $fieldE SET DEFAULT nextval({$newSeqQ}::regclass)", $fname