Postgres 9.4使用GIN添加INDEX

时间:2016-04-13 10:08:13

标签: indexing doctrine postgresql-9.4 gin

我正在使用Postgres 9.4,JSONB字段,这些都很好用。 但是当我添加GIN索引时,教程迁移无法创建索引。

class Version20160314132147_Gin_Indexes_content   extends AbstractMigration {

public function up(Schema $schema) {
    $this->addSql('CREATE INDEX contents_properties_ix ON contents USING gin (properties);');
}

/**
 * @param Schema $schema
 */
public function down(Schema $schema) {
    $this->addSql('DROP INDEX contents_properties_ix;');
}
}

错误: [学说\ DBAL \驱动\ PDOException]   SQLSTATE [42704]:未定义的对象:7错误:数据类型json没有访问方法“gin”的默认运算符类   提示:您必须为索引指定运算符类,或者为数据类型定义默认运算符类。

Composer.json     {         “苗条/苗条”:“~2.6”,         “doctrine / orm”:“~2.5”,         “doctrine / dbal”:“2.5”,         “symfony / yaml”:“2.8。 @dev”,         “doctrine / cache”:“〜1.5@dev”,         “symfony / console”:“2.8。 @dev”,         “symfony / class-loader”:“^ 2.7.4”,         “教义/迁移”:“~1.0”,         “predis / predis”:“~1.0.1”,         “guzzlehttp / guzzle”:“~5.0”,         “twig / twig”:“~1.0”,         “php-di / php-di”:“^ 5.1.0”,         “monolog / monolog”:“〜1.15@dev”,         “boldtrn / jsonb-bundle”:“~1.0”,         “opsway / doctrine-dbal-postgresql”:“~0.1”,         “fzaninotto / faker”:“~1.3.0”,         “aws / aws-sdk-php”:“^ 3.9”     }

1 个答案:

答案 0 :(得分:2)

Postgres似乎抱怨您的列properties不是文本类型,因此无法使用GIN对其进行索引。

您可能已成功将列投射到文本:

CREATE INDEX contents_properties_ix ON contents USING gin (properties::text);