uso

雑記いろいろ
★書いてある内容に保証は一切ありません。
 ご自身で判断をしてください。

[psql]とかPstgreSqlについて

2018-07-22 17:17:27 | work

時々触るのでコマンドメモ

■圧縮したBKテーブルの作成(そのあとにテーブルコメントを入れる)
CREATE TABLE WITH (appendonly=true, compresstype=quicklz) AS select * from ;
COMMENT ON TABLE IS 'コメント';

■psqlコマンド(copy)

https://www.postgresql.jp/document/9.3/html/app-psql.html#APP-PSQL-META-COMMANDS-COPY
psql
www.postgresql.jp
-a--echo-all. 読み込んだ全ての行を標準出力に表示します。 これは対話式モードよりもスクリプト処理の際に有用です。

コマンド例(powershellでやった)
①pgAdminのインストールフォルダに移動
 C:\Program Files (x86)\pgAdmin III\1.16 ※環境により違う。psql.exeがある場所
②コピー元DBにログインしコピー
(CSVアウトプットのパス指定をしないとPCのユーザー設定によってはPermission deniedが出る)
 .\psql --host=<hostname> --dbname=<dbname> --username=<username> --password
 \copy (select * from ) to 'c:\hoge\hoge.csv' with csv;
③コピー先DBにログインしCSVを復元
 .\psql --host=<hostname> --dbname=<dbname> --username=<username> --password
 \copy (col1,col2,・・・) from 'c:\hoge\hoge.csv' with csv


※カラム指定は省略可能→ (col1,col2,・・・)

■psqlコマンドその2(SQLファイル実行)

# psql -d {データベース名} -U {ユーザ名} -f {ファイル名}
psql -d command_test -U commander -f test.sql

\copyコマンドではSQLファイルの指定はできない。
間違えやすいので注意。
コメント

SVN

2018-01-17 13:39:12 | work
仕事で使ってみた。
ローカルの容量が小さくなったので、覚えてサクサク使えたらいいのだが。。

【SVNコマンドで検索する】http://ambiesoft.fam.cx/blog/archives/2546

svnレポジトリの中から全部を検索する。サーバーはserver、検索語句はaaa
$ svn list -R svn://server | awk '!/\/$/{print}' | sed 's;^;svn://server/;' | xargs -d \\n -n 1 --verbose svn cat |grep aaa
⇒一気にやると大変

移動
$cd c:\work\svn_command
不要ファイルは消す
$rm all*
リポジトリ内のファイル一覧を取り出す
$ svn list -R http(svn)://svnserver/dir > c:\work\svn_command\all
allファイルにはディレクトリが含まれているのでこれを削除する。ディレクトリは最後が/で終わっているのでこれを削除する。
$ awk "!/\/$/{print}" all > all2
all2の各行にsvn://svnserver.example.comを加える
$ sed "s;^;http(svn)://svnserver/dir/;" all2 > all3
★対象のSQL探す
$grep ".*TESTFILENAME.*" all3

★最新リビジョンを取得
all3に「svn log -l 1 」を足す
$ sed "s:^:svn log -l 1 :" all3 | sed "s:$::" > all4

コマンドを抜き取ってコピー
grep ".*TESTFILENAME.*" all4 | CLIP

※コマンドプロンプトでコピー&ペースト
alt + space + e + p

--以降はGREPのためのコマンド生成
all3はsvnのフルパスになった。つぎにsvn catを足す。
$ sed "s:^:svn cat ':" all3 | sed "s:$:':" > all4
grep を足す。ここでは”abc”を検索する。
$ sed "s:$:| grep -i abc:" all4 > all5
コメント

[vim]今更ながらやってみた

2018-01-09 00:22:18 | work
メモ


DLサイト
https://www.kaoriya.net/software/vim/

配置場所
D:\App\vim80-kaoriya-XXX
※フォルダ名にスペースあると動かないプラグインがあるらしい

パスを通した
> setx PATH "%PATH%";D:\App\vim80-kaoriya-XXX

gvim.exeとvim.exeがあるが違いは不明

とりあえずチュートリアル起動
コマンドプロンプト→vim→:Tutorial

30分くらいで終わるって書いてあったけど、終わらなかった。。
コメント

[java]JSPについて

2016-12-11 23:31:11 | work
■JavaとWebシステム
サーバサイドJava。それまではアプレットでクライアントから起動させるのが一般的だった。
1997年あたりにJavaがWebに登場
CGI(Common Gateway Interface)は,Webサーバーが他のプログラムを呼び出すためのインタフェース。
一般にCGIに準拠して作成したプログラムをCGIまたはCGIプログラムと呼ぶことが多い。

■サーブレットとは
Java Servlet(ジャバ サーブレット)とは、サーバ上でウェブページなどを動的に生成したりデータ処理を行うために、
Javaで作成されたプログラム及びその仕様である。Java EEの一機能という位置づけになっている。
2014年1月現在の最新版は、Java EE 7 に含まれる Servlet 3.1 (JSR-340) である。

CGIがクライアントのリクエストのたびに新しいプロセスを起動するのに対して、サーブレットはメモリに常駐して、リクエストのたびにプロセスより軽量なスレッドを起動するので、効率がよい。
また、サーブレットはJavaで書かれているのでさまざまなプラットフォームで使うことができる。

必ずインポートする必要があるパッケージ
 java.ioパッケージ
 javax.servletパッケージ
 javax.http.servletパッケージ

■JSPとは
JavaServer Pages (JSP) は、HTML内にJavaのコードを埋め込んでおき、Webサーバで動的にWebページを生成してクライアントに返す技術のこと。
テンプレートエンジン。
サーブレットの技術の延長としてJSPがあるが、JSPはサーブレットを自動生成して動作している。
厳密に言えばサーブレットとJSPは違う技術だが、これらは組み合わせて使うのが一般的なため、JSPもサーブレットの一部として扱われることが多い。

JSPのライフサイクル
 ブラウザ→JSP起動(要求)→Webコンテナ→JSP出力(応答)→ブラウザ
 JSPページ→JSPコンパイラ→Servletプログラム→Javaコンパイラ→Servletクラス

メリット
・プログラムとデザインの棲み分けができる
・独自のタグでコードを埋め込むことができる

デメリット
・最初はコンパイルの時間がかかる
 ※2回目以降は必要なくなるため、結果としてアクセス速度が早くなる
・煩雑な処理を書くと、結局ごちゃごちゃする

--JavaServletで書いた場合
HelloWorld.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException {
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out=response.getWriter();
out.println("<html><head>");
out.println("<title>Hello, World!!</title>");
out.println("</head><body>");
out.println("

Hello,World!!

");
out.println("</body></html>");
}
}

--JSPで書いた場合
HelloWorld.jsp
<html>
<head>
<title>Hello, World!!</title>
</head>
<body>
<% out.println("

Hello,World!!

"); %>
</body>
</html>

■暗黙オブジェクト
宣言がなくても使えるオブジェクト
out javax.servlet.jsp.JspWriterクラスのオブジェクト変数
request javax.servlet.http.HttpServletRequestクラスのオブジェクト変数
response javax.servlet.http.HttpServletResponseクラスのオブジェクト変数
pageContext javax.servlet.jsp.PageContextクラスのオブジェクト変数
session javax.servlet.http.HttpSessionクラスのオブジェクト変数
application javax.servlet.ServletContextクラスのオブジェクト変数
config javax.servlet.ServletConfigクラスのオブジェクト変数
page javax.servlet.jsp.HttpJspPageクラスのオブジェクト変数
exception java.lang.Throwableクラスのオブジェクト変数

request:クライアントから送信されたリクエスト情報を処理する
response:クライアントに送信するレスポンス情報を処理する
session:セッションスコープ内で共有する情報を管理する
out: クライアントに情報を出力する

■JSPのタグ
Javaのコードは、<%と%>記号で囲まれた部分に書かれる。
スクリプトレット(<%~%>で囲まれたコード部分)。

ディレクティブ※1 <%@ ディレクティブ %> このJSPファイルの処理時の属性をWebコンテナに伝える
宣言 <%! 宣言 %> JSPで使用する変数やメソッドを宣言する
スクリプトレット <% Javaコード %> タグ内にJavaのコードを自由に記述する→スクリプトコードの断片(let)
式(Expression) <%= 式 %> 式の評価結果をHTMLの中に出力する
アクション※2 <jsp:アクション名> JSPでよく行う処理をタグで簡潔に記述する
コメント <%-- コメント --%> JSPとしてのコメントを記述する

※1ディレクティブ
ディレクティブ(指令)とは、その名のとおり、JSP/サーブレットコンテナに対する指示を行うものです。
<%@ ディレクティブ名 属性名1="属性値1" 属性名2="属性値2" ... %>

@page 現在のページの処理方法を指定
@include 外部ファイルをインクルード(「アクションタグ」参照)
@taglib タグライブラリを定義(後続の記事で紹介)

※2アクション
<jsp:include> 指定されたページをインクルード
<jsp:forward> 指定されたページにリダイレクト
<jsp:getProperty> JavaBeansのプロパティを取得
<jsp:setProperty> JavaBeansのプロパティに指定値(あるいはフォームの値)を設定
<jsp:useBean> JavaBeansの使用を定義

■JSPのコメント
<%--~--%>:静的なコンテンツ部分に記述、コンテナによる解析時に切り捨てられ、クライアント側には送信されない
/*~*/  :スクリプトレット、宣言部内で使用することができる、Javaの一般的なコメント構文。静的なHTMLコード内では使用することができない。
//    :「/*~*/」同様、スクリプトレット、宣言部内で使用することができる、Javaの一般的なコメント構文
 <%
  out.print("複数行コメントの例です。");
  /* コメント
    コメント */
  // コメント
 %>
:HTMLの一般的なコメント構文。静的なHTMLコードの中に記述することができます。クライアント側で処理されるため「ソースの表示」で見られる。



■MVCの考え方
Model  =JavaBeans
Control =Servlet
view   =JSP

JavaBeansとは「再利用性を高めるために、ある一定の構文規則にのっとって記述された」という以外には、まったく普通のクラスと同じ。
・引数のないコンストラクタが定義されていること
・プロパティを参照・設定するためのアクセサメソッドが定義されていること


https://ja.wikipedia.org/wiki/JavaServer_Pages
コメント

[SQL]ANSI SQLについて

2016-10-16 00:46:44 | work
ANSI SQLについて


■規格団体
ANSI(American National Standards Institute:米国標準化団体)
ISO(International Standards Organization: 国際標準化機構)

SQL以外にもDBに関係する事全般も決めている
→DBの型、オブジェクト、トランザクション、etc

■SQLの規格
SQL86, SQL89, SQL92, SQL:1999, SQL:2003, SQL:2006, SQL:2008, SQL:2011

Oracle11g(11.1)≒SQL:2003
Oracle11g(11.2)≒SQL:2008
Oracle12c ≒SQL:2011

↑すべての規約を準拠しているわけではない

■SQLって何?
関係データベース管理システム (RDBMS) において、データの操作や定義を行うためのデータベース言語(問い合わせ言語)
ANSI=SQLはSQL
IBM社が開発したRDBMSの実験実装である
System R の操作言語「SEQUEL (Structured English Query Language)」であったことが由来となっている。

■SQLって何でできてるの?
構成  =命令・演算子・関数+拡張命令セット(PL-SQL、Trunsact-SQL)
構成要素=予約語・データベースオブジェクト・式

■SQLとは
命令
DML(データ操作命令)
 SELECT、FROM、WHERE、ORDER BY、GROUP BY、HAVING、
 UPDATE、DELETE、
 MERGE(SQL:2003)・REPLACE
 ・・・
DDL(データ定義命令)
 CREATE、DROP、ALTER、TRUNCATE(SQL:2008)→COMMIT、ROLLBACKの扱いが会社によって違う
 ・・・
DCL(データ制御命令)
 GRANT、REVOKE・・・

演算子
 算術演算子(+-*/%)
 比較演算子(= < > >= <= <> !=)
 論理演算子(ALL、AND、ANY、BETWEEN、EXISTS、ILIKE、IN、LIKE、NOT、OR・・・)
 単項演算子(+、-、IS NULL)
 集合演算子(UNION、EXCEPT、MINUS、INTERSECT)
 ビット演算子(&|^#)
 その他演算子(||、CASE)
  ||はOracle、DB2、PostgreSqlのみOK
  MySQLでは「OR」と同じ
  型の違う結合は禁止(char || varchar)
  OracleだけNULLの扱いが違う('a' || null→'a')

関数
 集計関数(SUM、COUNT、MAX・・・)
 文字列関数(TRIM、UPPER、LOWER・・・)
 日付関数(EXTRACT、CURRENT_DATE、CURRENT_TIME・・・)
  EXTRACT ( 日付要素 FROM 日付式、または、期間式 ) →指定した日時フィールドの値を取り出す
 変換関数(CAST、COLALESCE・・・)
 算術関数(COS、SIN、POW・・・)
 

●ANSI準拠じゃないマイナーSQL
 LIMIT(MySQL・PostgreSQL)、TOP(SQLServer)⇒OFFSETとFETCH※Oracleは12cから

SQL> SELECT * FROM (
2 SELECT tab2.*, ROW_NUMBER() OVER(ORDER BY c2) rn
3 FROM tab2) WHERE rn <= 5;

SQL> SELECT * FROM tab2 ORDER BY c2 FETCH FIRST 5 ROWS ONLY;

 SELECT INTO(MySQL・PostgreSQL)⇒OracleだとCreate Table AS、どっちにしても独自機能
 REPLACE→MERGE
 算術演算子(%→ない)
 比較演算子(!=→<>)
 ビット演算子(&|^#)

●ANSI準拠じゃないまあまあ知ってるなSQL
 集合演算子(MINUS→INTERSECT)
 変換関数(NVL(Oracle)→COLALESCE:コウアレス、DECODE→CASE)
  COLALESCE=NULL値でない最初の引数を返す、すべてNULLならUNKNOWNを返す
 日付関数全般(TO_CHAR、TO_DATE、ADD_MONTH、YEAR、MONTH、DAY・・・)

■これが困った独自SQL
Oracleの結合→+(SqlServerだと*= =*がある)※制限がある


SQL(wiki)
https://ja.wikipedia.org/wiki/SQL

SQL言語の概要
http://rfs.jp/sb/sql/s01/02-16.html

SQLの観点から「Oracle Database」「PostgreSQL」「MySQL」の特徴を整理しよう!
https://www.ashisuto.co.jp/corporate/column/technical-column/detail/1197236_2274.html

1.8.2 MySQL と標準 SQL との違い
https://dev.mysql.com/doc/refman/5.6/ja/differences-from-ansi.html

第20回 RDBMSの種類によるUPDATE文の仕様の違い
http://www.oss-db.jp/measures/dojo_20.shtml

データベース
https://www.ipa.go.jp/files/000018652.pdf
コメント