标签: ddl

如何从NHibernate映射文件生成"迁移"DDL?

我在我的项目中使用NHibernate 2和PostgreSQL.SchemaExport类为数据库生成DDL方案做得很好,但在第一个应用程序之前它很棒.

有没有办法使用NHibernate映射文件生成"迁移"DLL(批处理"ALTER TABLE"而不是DROP/CREATE对)?

postgresql nhibernate ddl continuous-integration

5
推荐指数
1
解决办法
2083
查看次数

SQL Server条件外键约束

我无法弄清楚如何创建外键约束.我的数据模型是固定的,不受我的控制,它看起来像这样:

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)

sql-server ddl

5
推荐指数
1
解决办法
5200
查看次数

使用数据定义语言删除列和所有依赖对象

我需要从表中删除一列,但当我尝试删除它时:

对象'object_name'依赖于列'column_name'.

ALTER TABLE DROP COLUMN column_name失败,因为一个或多个对象访问此列.

我可以在系统表中查找依赖项并手动删除它,但我需要进行迁移(使用SQL DDL),以便团队中的所有其他成员只进行更新,运行迁移而不必陷入困境系统对象.

sql t-sql sql-server ddl

5
推荐指数
1
解决办法
1万
查看次数

如何在MS中创建具有自动编号字段的表 - 在运行时访问?

我正在使用MS-Access和JSP.我想知道如何使用自动编号字段和主键创建表.

query ="Create Table Registration_A(Reg_No PRIMARY KEY AUTOINCREMENT,FName varchar(2))";

但它给出了语法错误.什么是正确的语法?

ddl ms-access

5
推荐指数
1
解决办法
2万
查看次数

在PostgreSQL中重命名多个列

我的表有以下格式的一堆列:

_settingA
_settingB
_settingB
Run Code Online (Sandbox Code Playgroud)

我想重命名它们只是添加一个前缀,如下所示:

_1_settingA
_1_settingB
_1_settingC
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最快捷/最有效的方法是什么?

编辑:我要补充一点,我有很多超过三列以这种方式重新命名.如果我只有三个,我会一个接一个地手动完成.并感谢你无论你是谁.

sql postgresql ddl automation sql-update

5
推荐指数
1
解决办法
2494
查看次数

Postgres“如果不存在”失败,因为序列存在

我正在构建的应用程序中有多个计数器,正试图使它们根据需要由应用程序动态创建。

举一个简单的例子,如果有人在脚本中输入单词,它应该返回该单词先前被输入的次数。如果输入了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)

我的印象是,通过使用“ …

postgresql ddl sequences postgresql-9.5

5
推荐指数
1
解决办法
2027
查看次数

重命名postgres表会删除现有索引吗?

我正在开发一个ETL,我们从蜂巢中获取数据并将其转储到Postgres。为了确保数据没有损坏,我首先将数据存储在一个临时表(使用所有索引和约束创建为主表)中,如果数据经过验证,则将其复制到主表中。但是,只要数据量巨大,就已经花费了很长时间。数据通过验证后,我现在考虑删除主表,然后将临时表重命名为主表。

在Postgres中重命名表格会删除在其上定义的索引,约束和默认值吗?

postgresql ddl database-design table-rename

5
推荐指数
1
解决办法
1698
查看次数

MySQL 8.0 Alter Table Algorithm=INSTANT 未按预期工作(需要 40 秒)

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 秒内阻止了读取和写入

这是预期的吗?我有什么遗漏的吗?

mysql ddl innodb alter amazon-rds

5
推荐指数
0
解决办法
1487
查看次数

仅当用户存在时如何执行“DROP OWNED BY”?

我正在尝试编写一个 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)

postgresql privileges ddl roles psql

5
推荐指数
1
解决办法
1606
查看次数

将 postgres 列设置为默认值不为空而不更新

有没有一种方法可以not null在一个语句中向列添加约束并用默认值替换所有现有的空值?

alter table t
alter column c set default 0,
alter column c set not null;
Run Code Online (Sandbox Code Playgroud)

似乎不起作用,给出错误:

column "c" contains null values
Run Code Online (Sandbox Code Playgroud)

sql postgresql ddl alter-table

5
推荐指数
1
解决办法
5566
查看次数