Dart Aqueduct 服务器数据库升级:连接到数据库时出错
Dart Aqueduct server database upgrade: error connecting to the database
我正在为我的 Aqueduct 服务器设置一个 PostgreSQL 数据库。我用 psql
:
创建了一个用户和数据库
CREATE DATABASE words;
CREATE USER words_user WITH createdb;
ALTER USER words_user WITH password 'password';
GRANT all ON database words TO words_user;
我的模特class是
import 'package:demo/demo.dart';
class Word extends ManagedObject<_Word> implements _Word {
}
class _Word {
@primaryKey
int id;
@Column(unique: true)
String word;
@Column()
String info;
}
我用
生成了一个迁移文件
aqueduct db generate
即:
import 'dart:async';
import 'package:aqueduct/aqueduct.dart';
class Migration1 extends Migration {
@override
Future upgrade() async {
database.createTable(SchemaTable("_Word", [
SchemaColumn("id", ManagedPropertyType.bigInteger,
isPrimaryKey: true,
autoincrement: true,
isIndexed: false,
isNullable: false,
isUnique: false),
SchemaColumn("word", ManagedPropertyType.string,
isPrimaryKey: false,
autoincrement: false,
isIndexed: false,
isNullable: false,
isUnique: true),
SchemaColumn("info", ManagedPropertyType.string,
isPrimaryKey: false,
autoincrement: false,
isIndexed: false,
isNullable: false,
isUnique: false)
]));
}
@override
Future downgrade() async {}
@override
Future seed() async {
final rows = [
{'word': 'horse', 'info': 'large animal you can ride'},
{'word': 'cow', 'info': 'large animal you can milk'},
{'word': 'camel', 'info': 'large animal with humps'},
{'word': 'sheep', 'info': 'small animal with wool'},
{'word': 'goat', 'info': 'small animal with horns'},
];
for (final row in rows) {
await database.store.execute(
"INSERT INTO _Word (word, info) VALUES (@word, @info)",
substitutionValues: {
"word": row['word'],
"info": row['info'],
});
}
}
}
但是现在当我尝试使用
应用迁移时
aqueduct db upgrade --connect postgres:password@localhost:5432/words
我收到错误:
*** There was an error connecting to the database 'null:null@:0/null'. Reason: unable to connect to database.
我在源代码中跟踪到此错误消息来自 here。
事实证明这是一个简单的修复。我没有在 CLI 升级命令中包含数据库用户名。
aqueduct db upgrade --connect postgres://words_user:password@localhost:5432/words
我通过将我写的内容与 documentation 中的示例进行比较找到了它。
另一次我忘记使用正确的数据库名称时遇到了类似的错误。还有一次,我在密码前有一个 space。请记住包括所有部分并确保所有内容的格式正确。一般格式为
aqueduct db upgrade --connect postgres://username:password@host:port/databaseName
您可以通过键入
获得有关 CLI 命令的帮助
aqueduct db --help
我正在为我的 Aqueduct 服务器设置一个 PostgreSQL 数据库。我用 psql
:
CREATE DATABASE words;
CREATE USER words_user WITH createdb;
ALTER USER words_user WITH password 'password';
GRANT all ON database words TO words_user;
我的模特class是
import 'package:demo/demo.dart';
class Word extends ManagedObject<_Word> implements _Word {
}
class _Word {
@primaryKey
int id;
@Column(unique: true)
String word;
@Column()
String info;
}
我用
生成了一个迁移文件aqueduct db generate
即:
import 'dart:async';
import 'package:aqueduct/aqueduct.dart';
class Migration1 extends Migration {
@override
Future upgrade() async {
database.createTable(SchemaTable("_Word", [
SchemaColumn("id", ManagedPropertyType.bigInteger,
isPrimaryKey: true,
autoincrement: true,
isIndexed: false,
isNullable: false,
isUnique: false),
SchemaColumn("word", ManagedPropertyType.string,
isPrimaryKey: false,
autoincrement: false,
isIndexed: false,
isNullable: false,
isUnique: true),
SchemaColumn("info", ManagedPropertyType.string,
isPrimaryKey: false,
autoincrement: false,
isIndexed: false,
isNullable: false,
isUnique: false)
]));
}
@override
Future downgrade() async {}
@override
Future seed() async {
final rows = [
{'word': 'horse', 'info': 'large animal you can ride'},
{'word': 'cow', 'info': 'large animal you can milk'},
{'word': 'camel', 'info': 'large animal with humps'},
{'word': 'sheep', 'info': 'small animal with wool'},
{'word': 'goat', 'info': 'small animal with horns'},
];
for (final row in rows) {
await database.store.execute(
"INSERT INTO _Word (word, info) VALUES (@word, @info)",
substitutionValues: {
"word": row['word'],
"info": row['info'],
});
}
}
}
但是现在当我尝试使用
应用迁移时aqueduct db upgrade --connect postgres:password@localhost:5432/words
我收到错误:
*** There was an error connecting to the database 'null:null@:0/null'. Reason: unable to connect to database.
我在源代码中跟踪到此错误消息来自 here。
事实证明这是一个简单的修复。我没有在 CLI 升级命令中包含数据库用户名。
aqueduct db upgrade --connect postgres://words_user:password@localhost:5432/words
我通过将我写的内容与 documentation 中的示例进行比较找到了它。
另一次我忘记使用正确的数据库名称时遇到了类似的错误。还有一次,我在密码前有一个 space。请记住包括所有部分并确保所有内容的格式正确。一般格式为
aqueduct db upgrade --connect postgres://username:password@host:port/databaseName
您可以通过键入
获得有关 CLI 命令的帮助aqueduct db --help