我想强制一个表的自动增量字段为某个值,我试着用这个:
ALTER TABLE product AUTO_INCREMENT = 1453
Run Code Online (Sandbox Code Playgroud)
和
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
Run Code Online (Sandbox Code Playgroud)
我是postgres的新手:(
我有一个表product与Id和name领域
我在NodeJS中有以下模型,包括sequelize和MySQL数据库:
var Sequelize = require('sequelize');
var User = sequelize.define('user', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
...
};
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下代码向我的数据库添加新用户:
sequelize.transaction().then(function(t) {
User.create({/* User data without id */}, {
transaction: t
}).then(function() {
t.commit();
}).catch(function(error) {
t.rollback();
});
});
Run Code Online (Sandbox Code Playgroud)
之后,我收到下一个错误:
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): START TRANSACTION;
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): SET autocommit = 1;
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): INSERT INTO `user` (`id`, /* next fields */) VALUES (DEFAULT, /* next values */);
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): ROLLBACK; …Run Code Online (Sandbox Code Playgroud) 我需要将两个数据库(Database1和Database2)合并到Postgresql中的公共数据库.
数据库1
表格1
Id - 值(Id是主键)
1 - a
2 - aa
3 - aaa
4 - aaaa
DATABASE2
表格1
Id值(Id是主键)
2 - bb
5 - bbbbb
我希望我的输出为
OutPutDatabase
表格1
Id值(Id是主键)
1 - a
2 - bb
3 - aaa
4 - aaaa
5 - bbbbb
我怎样才能做到这一点?
我有一个 django 应用程序,我正在对其进行一些单元测试。所以我遇到的问题不是当一个测试插入测试数据库时。之后是测试。由于每个测试都没有保存事务,因此上一个测试中的条目不存在,这很好,尽管自动增量 id 正在增加,就好像数据库中仍有条目一样。我需要解决这个问题,因为我在无法控制给它的 id 的地方插入了更多的数据,并且需要能够为测试获取这个特定的数据。如果我对代码进行硬编码以获取对象,则每次添加新测试时都必须更改代码,这并不理想。
我有多个测试正在运行,但为了简单起见,我将展示两个。
from django.test import TestCase
from app.models import Model
class VersionMerge(TestCase):
fixtures = ['initial_test_data.json']
def test_model_test1(self):
*Insert new data*
*grab new data in*
*Check data*
def test_model_test2(self):
*Insert new data*
*grab new data*
*Check data*
Run Code Online (Sandbox Code Playgroud)
问题出现在test_model_test2 中,当我尝试获取新数据时,我必须打印出对象以查看 id 才能获取它。
我有一个关于如何在实际数据库而不是测试数据库上修复此问题的解决方案。对于我的,我需要能够连接到 docker 容器并运行 psql 命令来重置 table_id_seq。
docker exec -t $CONTAINER_ID psql --dbname=test_database_name -username=user -c "SELECT setval('modelName_appName_id_seq', 2, true)"
Run Code Online (Sandbox Code Playgroud)
这将转到表并将过去的 id 值设置为 2 以使下一个 id 为 3。但是,每当我尝试从 python 内部运行命令时,使用
cmd = …Run Code Online (Sandbox Code Playgroud) exports.seed = async function(knex, Promise) {
await knex.raw('TRUNCATE TABLE posts RESTART IDENTITY CASCADE')
await knex.raw('TRUNCATE TABLE users RESTART IDENTITY CASCADE')
}
Run Code Online (Sandbox Code Playgroud)
和一些种子数据....
const faker = require('faker')
const post = [
{
id: 1,
title: faker.lorem.words(),
body: '12 - 10',
answers: '[12]',
user_id: 1
},
{
id: 2,
title: faker.lorem.words(),
body: '12 - 10 + 123',
answers: '[12]',
user_id: 1
},
{
id: 3,
title: faker.lorem.words(),
body: '12 - 10 / 901',
answers: '[12]',
user_id: 1
}
]
exports.seed = (knex, …Run Code Online (Sandbox Code Playgroud) database ×2
postgresql ×2
django ×1
docker ×1
knex.js ×1
merge ×1
mysql ×1
node.js ×1
objection.js ×1
python ×1
reset ×1
sequelize.js ×1
shell ×1
sql ×1