2009年10月31日土曜日

groovyとPostgreSQLで制約を一覧表示する

groovyとPostgreSQLで制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """select
cls.relname,
cons.conname,
cons.contype,
cons.consrc
from
pg_constraint cons
join pg_class cls
on (cons.conrelid = cls.oid)
"""

sql.eachRow(query){
// テーブル名
println "relname:${it.relname}"
// 制約名
println "conname:${it.conname}"
// 制約タイプ
println "contype:${it.contype}"
// 制約場合、制約のexpression
println "consrc:${it.consrc}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_constraint
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-constraint.html

2009年10月30日金曜日

groovyとPostgreSQLとquartzの組み合わせでジョブ情報を表示する

groovyとPostgreSQLとquartzの組み合わせでジョブ情報を表示するには、以下のコードを実行します。


import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
//sf = new StdSchedulerFactory()
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

// ジョブ情報の表示
job = sched.getJobDetail("job1", "group1")
if( job != null ){
println("name:" + job.name)
println("full name:" + job.fullName)
println("group:" + job.group)
println("job class:" + job.jobClass.name)
}
sched.shutdown(true)


設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false

groovyとSQL Serverでキー制約を一覧表示する

groovyとSQL Serverでキー制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select
obj.name as table_name,
kc.name,
kc.is_system_named
from sys.key_constraints kc
join sys.objects obj
on (kc.parent_object_id = obj.object_id)
order by 1,2
"""
sql.eachRow(query){
// テーブル名
println("table_name:${it.table_name}")
// キー制約名
println("name:${it.name}")
// システムにより生成された名前か
println("is_system_named:${it.is_system_named}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.key_constraints (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms174321.aspx

2009年10月29日木曜日

groovyとSQL Serverでチェック制約を一覧表示する

groovyとSQL Serverでチェック制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select
chk.name,
chk.definition,
obj.name as table_name
from sys.check_constraints chk
join sys.objects obj
on (chk.parent_object_id = obj.object_id)
"""
sql.eachRow(query){
// CHECK制約名
println("name:${it.name}")
// 定義
println("definition:${it.definition}")
// テーブル名
println("table_name:${it.table_name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.check_constraints (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187388.aspx

2009年10月28日水曜日

groovyとSQL ServerでBULK INSERTを使用してCSVを取り込む

groovyとSQL ServerでBULK INSERTを使用してCSVを取り込むには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
BULK INSERT company
FROM 'C:\\share\\company.csv'
WITH
(
FIELDTERMINATOR =',',
ROWTERMINATOR ='\\n'
)
"""

// バルクインサートの実行
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
BULK INSERT (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188365.aspx

groovyとSQL Serverでインデックスの無効化・リビルドを行う

groovyとSQL Serverでインデックスの無効化・リビルドを行うには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

table = "company"
index = "uk_company_name"
// インデックスの無効化
sql.execute("alter index " + index + " ON ${table} DISABLE")
// 無効化されたインデックスの表示
sql.eachRow("select * from sys.indexes where is_disabled = 1"){
// インデックス名
println("name:${it.name}")
println "----"
}
// インデックスのリビルド
sql.execute("alter index " + index + " ON ${table} REBUILD")
// 無効化されたインデックスの表示
sql.eachRow("select * from sys.indexes where is_disabled = 1"){
// インデックス名
println("name:${it.name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
ALTER INDEX (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188388.aspx

2009年10月27日火曜日

groovyとSQL Serverで指定期間ウエイトする

groovyとSQL Serverで指定期間ウエイトするには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
waitfor delay '00:00:30'
"""
println(new Date())
sql.execute(query)
println(new Date())


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
WAITFOR (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187331.aspx