【问题标题】:The nextval param is not accepting more than 60 characters while usinng postgres and zend使用 postgres 和 zend 时,nextval 参数不接受超过 60 个字符
【发布时间】:2013-02-16 19:18:11
【问题描述】:

在 zend 中,我为特定模块创建了映射器和模型。我正在尝试将数据从 zend 控制器文件保存到表中

我使用 postgresql 作为数据库。我已经设置了一个带有主键的表来自动递增

表名和对应的主键如下:

tbl_user_group_business_prmission       --table

pk_bint_user_group_business_prmission_id   --primary key

主键生成如下

 nextval('tbl_user_group_business_prmission_pk_bint_user_group_business_prmission_id_seq'::regclass)

你可以看到nextval()里面的参数count(character)超过了60。这就是我面临的问题。 IE。我无法将数据插入此表,因为此参数的计数(字符)超过 60

我收到类似“未生成主键”的错误。

只有在 nextval() 中的字符超过 60 个时才会出现此问题

【问题讨论】:

  • 尽可能将表名或主键重命名为一些短名称,因为参数是表名和主键的组合,不能超过60个字符的限制。

标签: php postgresql zend-framework


【解决方案1】:

postgres 系统使用不超过 63 个字节的标识符;较长的名称可以写在命令中,但它们会被截断。查看本手册SQL-SYNTAX-IDENTIFIERS

但是您可以通过创建自定义CREATE SEQUENCE 或通过 phppgadmin 或 pgAdmin 接口来更新序列的名称。

在这种情况下,最好将table nameprimary key column name 改短一些,因为在zend 中,通过连接tableName+columnName+ 来创建序列是硬编码的...您可以在此处查看代码/Zend/Db/Adapter/Pdo/Pgsql.php 函数@ 987654327@

编辑:
这个SO post还有一个建议

【讨论】:

  • 非常感谢您的回答。
  • 非常感谢您的回答。如果它是垃圾,我很抱歉,有没有办法在zend中更改这个硬编码值,以便我可以获取更多标识符?或者我该如何使用创建序列...?谢谢
  • @LinoCk 抱歉,我认为您无法更改该代码。最好更新表名或字段名,并将序列名限制为60个字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 2015-05-14
相关资源
最近更新 更多