我在我的项目中使用NHibernate 2和PostgreSQL.SchemaExport类为数据库生成DDL方案做得很好,但在第一个应用程序之前它很棒.
有没有办法使用NHibernate映射文件生成"迁移"DLL(批处理"ALTER TABLE"而不是DROP/CREATE对)?
我无法弄清楚如何创建外键约束.我的数据模型是固定的,不受我的控制,它看起来像这样:
CREATE TABLE Enquiry
(Enquiry_Ref INTEGER PRIMARY KEY CLUSTERED, Join_Ref INTEGER, EnquiryDate, EnquiryType...)
CREATE TABLE Contact
(Contact_Ref INTEGER PRIMARY KEY CLUSTERED, Surname, Forenames ....)
CREATE TABLE UniversalJoin
(Join_Ref INTEGER, Contact_Ref INTEGER, Rel_Type INTEGER)
Run Code Online (Sandbox Code Playgroud)
每个查询只有一个联系人.两者之间的联系是UniversalJoin表所在
Enquiry.Join_Ref = UniversalJoin.Join_Ref AND
Rel_Type = 1 AND
UniversalJoin.Contact_Ref = Contact.Contact_Ref
Run Code Online (Sandbox Code Playgroud)
Rel_Type根据源表的不同而不同,因此在Inquiry的情况下,Rel_Type为1,但对于另一个表,它将设置为N.
我的问题是如何创建外键约束来强制实现这种关系的完整性?我想说的,但不能,是:
CREATE TABLE Enquiry
...
CONSTRAINT FK_Foo
FOREIGN KEY (Join_Ref)
REFERENCES UniversalJoin (JoinRef WHERE Rel_Type=1)
Run Code Online (Sandbox Code Playgroud) 我需要从表中删除一列,但当我尝试删除它时:
对象'object_name'依赖于列'column_name'.
ALTER TABLE DROP COLUMN column_name失败,因为一个或多个对象访问此列.
我可以在系统表中查找依赖项并手动删除它,但我需要进行迁移(使用SQL DDL),以便团队中的所有其他成员只进行更新,运行迁移而不必陷入困境系统对象.
我正在使用MS-Access和JSP.我想知道如何使用自动编号字段和主键创建表.
query ="Create Table Registration_A(Reg_No PRIMARY KEY AUTOINCREMENT,FName varchar(2))";
但它给出了语法错误.什么是正确的语法?
我的表有以下格式的一堆列:
_settingA
_settingB
_settingB
Run Code Online (Sandbox Code Playgroud)
我想重命名它们只是添加一个前缀,如下所示:
_1_settingA
_1_settingB
_1_settingC
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最快捷/最有效的方法是什么?
编辑:我要补充一点,我有很多超过三列以这种方式重新命名.如果我只有三个,我会一个接一个地手动完成.并感谢你无论你是谁.
我正在构建的应用程序中有多个计数器,正试图使它们根据需要由应用程序动态创建。
举一个简单的例子,如果有人在脚本中输入单词,它应该返回该单词先前被输入的次数。如果输入了example单词,则可以执行此sql的示例。
CREATE SEQUENCE IF NOT EXISTS example START WITH 1;
SELECT nextval('example')
Run Code Online (Sandbox Code Playgroud)
这将1在第一次运行时返回,2第二次运行,等等。
问题是两个人同时单击按钮时。首先,请注意,我的应用程序中发生的不仅仅是这些语句,因此它们重叠的可能性比发生的所有事情要重要得多。
1> BEGIN;
2> BEGIN;
1> CREATE SEQUENCE IF NOT EXISTS example START WITH 1;
2> CREATE SEQUENCE IF NOT EXISTS example START WITH 1; -- is blocked by previous statement
1> SELECT nextval('example') -- returns 1 to user.
1> COMMIT; -- unblocks second connection
2> ERROR: duplicate key value violates unique constraint
"pg_type_typname_nsp_index"
DETAIL: Key (typname, typnamespace)=(example, 109649) already exists.
Run Code Online (Sandbox Code Playgroud)
我的印象是,通过使用“ …
我正在开发一个ETL,我们从蜂巢中获取数据并将其转储到Postgres。为了确保数据没有损坏,我首先将数据存储在一个临时表(使用所有索引和约束创建为主表)中,如果数据经过验证,则将其复制到主表中。但是,只要数据量巨大,就已经花费了很长时间。数据通过验证后,我现在考虑删除主表,然后将临时表重命名为主表。
在Postgres中重命名表格会删除在其上定义的索引,约束和默认值吗?
MySQL 8.0 - 正如MySQL 官方文档和MySQL 服务器团队中所述,Alter table with Algorithm=INSTANT 会立即添加列,而不需要任何锁定。
但是,结果不同了。
测试设置- 具有 40M 行的表。在表上读取和写入 (1000 TPS)。表架构非常简单。
field,type,null,key,default,extra
id,bigint(20),NO,PRI,,auto_increment
t_a,bigint(20),NO,MUL,,""
t_b,bigint(20),NO,MUL,,""
t_c,int(11),NO,"",1,""
Run Code Online (Sandbox Code Playgroud)
基础设施: AWS RDS MySQL 8 - 引擎版本 - 8.0.17
测试用例: 向表中添加新列。
陈述:
alter table table_name add column_name int, algorithm=instant;
Run Code Online (Sandbox Code Playgroud)
结果:
mysql> alter table test_table add test_column int, algorithm=instant;
Query OK, 0 rows affected (36.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
花了大约 40 秒。它在40 秒内阻止了读取和写入
这是预期的吗?我有什么遗漏的吗?
我正在尝试编写一个 bash 脚本来创建 Postgres 数据库,以及访问该数据库的用户和用户权限。我正在使用 Postgres 9.6。我有以下...
create_db_command="SELECT 'CREATE DATABASE $DB_NAME' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$DB_NAME')\gexec"
drop_owned_by_command="DROP OWNED BY $DB_USER;"
drop_role_command="DROP ROLE IF EXISTS $DB_USER;"
create_user_command="create user $DB_USER with encrypted password '$DB_PASS';"
grant_privs_command="grant all privileges on database $DB_NAME to $DB_USER;"
PGPASSWORD=$ROOT_PASSWORD
# This command creates the db if it doesn't already exist
echo "SELECT 'CREATE DATABASE $DB_NAME' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$DB_NAME')\gexec" | psql -U$PG_USER
psql -U$PG_USER $DB_NAME -c "$drop_owned_by_command" …Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以not null在一个语句中向列添加约束并用默认值替换所有现有的空值?
alter table t
alter column c set default 0,
alter column c set not null;
Run Code Online (Sandbox Code Playgroud)
似乎不起作用,给出错误:
Run Code Online (Sandbox Code Playgroud)column "c" contains null values
ddl ×10
postgresql ×6
sql ×3
sql-server ×2
alter ×1
alter-table ×1
amazon-rds ×1
automation ×1
innodb ×1
ms-access ×1
mysql ×1
nhibernate ×1
privileges ×1
psql ×1
roles ×1
sequences ×1
sql-update ×1
t-sql ×1
table-rename ×1