Java 在分区表中插入时获取生成的键值
嗨,我在Postgres有一张桌子,比如说电子邮件。它是分区的,因此无论我使用java应用程序执行什么插入操作,都不会影响主表,因为数据实际上是插入到子表中的。问题是,我想得到一个自动生成的列值(比如email\u message\u id,它是大的串行类型)。Postgres将其返回为null,因为主表上没有插入操作。对于oracle,我使用GeneratedKeyHolder来获取该值。但我无法对postgres中的分区表执行相同的操作。请帮帮我 下面是我们用于oracle的代码片段Java 在分区表中插入时获取生成的键值,java,postgresql,spring-jdbc,Java,Postgresql,Spring Jdbc,嗨,我在Postgres有一张桌子,比如说电子邮件。它是分区的,因此无论我使用java应用程序执行什么插入操作,都不会影响主表,因为数据实际上是插入到子表中的。问题是,我想得到一个自动生成的列值(比如email\u message\u id,它是大的串行类型)。Postgres将其返回为null,因为主表上没有插入操作。对于oracle,我使用GeneratedKeyHolder来获取该值。但我无法对postgres中的分区表执行相同的操作。请帮帮我 下面是我们用于oracle的代码片段 pub
public void createAndFetchPKImpl(final Entity pEntity,
final String pStatementId, final String pPKColumnName) {
final SqlParameterSource parameterSource =
new BeanPropertySqlParameterSource(pEntity);
final String[] columnNames = new String[]{"email_message_id"};
final KeyHolder keyHolder = new GeneratedKeyHolder();
final int numberOfRowsEffected = mNamedParameterJdbcTemplate.update(
getStatement(pStatementId), parameterSource, keyHolder, columnNames);
pEntity.setId(ConversionUtil.getLongValue(keyHolder.getKey()));
}
在PostgreSQL中使用基于触发器的分区时,JDBC驱动程序报告零行受影响/插入是正常的。这是因为原始SQL
UPDATE
、INSERT
或DELETE
实际上没有生效,主表上没有任何行被更改。而是对一个或多个子表执行操作
基本上,PostgreSQL中的分区有点麻烦,这是它的一个更明显的限制
解决办法是:
/插入
/更新
直接针对子表,而不是顶级表李>删除
- 忽略结果行计数;或
- 使用
s和规则
(但它们有自己的问题)(不适用于分区)插入。。。返回