我正在使用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” }
答案 0 :(得分:2)
Postgres似乎抱怨您的列properties
不是文本类型,因此无法使用GIN对其进行索引。
您可能已成功将列投射到文本:
CREATE INDEX contents_properties_ix ON contents USING gin (properties::text);