如何修复 SQLSTATE [42704]:未定义对象:7 错误:数据类型 json 在heroku 托管中没有访问方法“btree”的默认运算符类

Posted

技术标签:

【中文标题】如何修复 SQLSTATE [42704]:未定义对象:7 错误:数据类型 json 在heroku 托管中没有访问方法“btree”的默认运算符类【英文标题】:How can i fix SQLSTATE[42704]: Undefined object: 7 ERROR: data type json has no default operator class for access method "btree" in heroku hosting 【发布时间】:2021-06-24 10:28:52 【问题描述】:

我想问一下如何解决我在本地的 laravel heroku 托管中的这个错误,我使用的是 mysql,但是在 heroku 中我切换到了 postgres,并且在迁移时遇到了这些错误。

在 Connection.php 第 678 行:

SQLSTATE[42704]:未定义对象:7 错误:数据类型 json 没有访问方法“btree”的默认运算符类 提示:您必须为索引指定一个运算符类或为数据类型定义一个默认运算符类。 (SQL:alter table "functions" 添加约束 "functions_function_elements_unique" unique ("function_elements"))

在 Connection.php 第 471 行:

SQLSTATE[42704]:未定义对象:7 错误:数据类型 json 没有访问方法“btree”的默认运算符类 提示:您必须为索引指定一个运算符类或为数据类型定义一个默认运算符类。

【问题讨论】:

你是否设置了Mysql的指定postegree instate 是的,我在 Heroku 做过,这就是为什么我认为在我使用 mysql 时在本地没有理由这样做,这可能是 eroor 的原因 JSON 属性上的 B 树索引有什么用?? 【参考方案1】:

大家好,所以我在这里找到了解决方案 :) ;

`
Schema::create('fdeg_functions', function (Blueprint $table) 
        $table->id();
        $table->timestamps();
        $table->Json("function_elements")->unique();
    );`

所以,我要做的就是将 json 转换为字符串,它工作得太好了; 我认为这不会对应用程序产生任何不良影响, 告诉我你看到了什么,我希望这对其他人有帮助:)

【讨论】:

【参考方案2】:

默认情况下,Laravel 附带 MySQL。您可能想尝试其他 SQL 数据库类型,更改非常简单,但是如果您选择的数据库是 postgres,则必须进行一些小配置。

    安装 从https://www.postgresql.org/download/ 下载 PostgreSQL 到您的电脑 或直接在此处(适用于 Windows)https://get.enterprisedb.com/postgresql/postgresql-12.1-3-windows-x64.exe 然后安装。 php.ini MySQL 是默认设置,因此需要通过编辑 php.ini 来激活 PostgreSQL 以在您的 PC 上与 PHP 一起使用 在您的 php.ini 中搜索这两行并删除“;”在每个前面:

;extension=pdo_pgsql ;extension=pgsql

to(注意“;”已被删除)

扩展=pdo_pgsql 扩展=pgsql

    .env 在 Laravel 的 .env 文件中根据需要更改以下内容(所有默认值都可以,除了 DB_DATABASE 和 DB_PASSWORD 您可能需要更改):
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=database_name
DB_USERNAME=postgres
DB_PASSWORD=your_choosen_password

【讨论】:

以上是关于如何修复 SQLSTATE [42704]:未定义对象:7 错误:数据类型 json 在heroku 托管中没有访问方法“btree”的默认运算符类的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL Developer 中的 DB2 SQL 错误-=-204、SQLSTATE=42704、SQLERRMC=SYSCAT.SCHEMATA

为什么我在执行以下查询时遇到错误SQLCODE = -204,SQLSTATE = 42704,DRIVER = 4.18.60

websphere容器启动jdbc连接异常,db2报Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=MARKET.ALL_SEQUENCES, DRIVER

DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: STAR9.T_LIANG,这个问题怎么在hibernate中如

LUMEN:如何修复 SQLSTATE [42000]:语法错误或访问冲突:laravel 流明上的 1071

SQLSTATE[HY093]:参数号无效:参数未定义