一覧すべての塩基配列、アミノ酸配列、Postgres db8.1SQL
-
18-09-2019 - |
質問
私に変換するdbからpostgresをイナリを使用しています。
からなるツールなのか、私のすべてをpostgres配列autoincrement id mysqlのautoincrement値です。
なので、たいのですが全ての塩基配列、アミノ酸配列、 Postgres DB8.1 版)に関する情報はテーブルで使用される次の値に等SQLクエリー?
それを利用できませんの information_schema.sequences
ビューの8.4。
解決
以下のクエリを名前のすべてのdnaの塩基配列を決定した。
SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';
通常、シーケンスとして ${table}_id_seq
.簡単な正規表現パターンマッチングとテーブルの名前です。
取得最終値の配列は以下のクエリ:
SELECT last_value FROM test_id_seq;
他のヒント
ことに注意してくださからPostgreSQL8.4き すべての 情報の配列をデータベー:
SELECT * FROM information_schema.sequences;
以降を使用していバージョンのPostgreSQL(9.1)、探していた同じ回答が高いか低い、あるいはこの回答のために子孫の酒は、将来のが揃.
実行します: psql -E
, その \ds
後少し痛んです。
を実現する最善の方法は、あなたはリストのすべてのテーブル
select * from pg_tables where schemaname = '<schema_name>'
次の表に一覧すべてのカラム属性
select * from information_schema.columns where table_name = '<table_name>'
その後、各カラム、テストされている場合配列
select pg_get_serial_sequence('<table_name>', '<column_name>')
そして、に関する情報をこのシーケンス
select * from <sequence_name>
との関係を自動生成された配列などをされているシリーカラム)なのか、親テーブルがモデルの配列のオーナーの属性。
を修正することができることの関係を所有する条項の 改変配列commmand
例えば改変配列foo_id有foo_schema.foo_table
設定するリンクテーブルにfoo_table
または 改変配列foo_id所有なし
の間の接続の配列は、テーブル
の情報この関係に格納され pg_dependカタログテーブル.
の接合関係のリンクとpg_depend.objid->pg_class.oidがrelkind='S'るリンクの配列への参加を記録しpg_depend.refobjid->pg_class.oidがrelkind='r'、リンクの参加のもと所有関係(テーブル)
このクエリを返しますすべてのシーケンス>テーブルの依存関係の改善に取り組んでいます。●Where条項ィでのみを含む自動生成に関する制限でのみ表示配列を作成したシリアルキーがある。
WITH fq_objects AS (SELECT c.oid,n.nspname || '.' ||c.relname AS fqname ,
c.relkind, c.relname AS relation
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace ),
sequences AS (SELECT oid,fqname FROM fq_objects WHERE relkind = 'S'),
tables AS (SELECT oid, fqname FROM fq_objects WHERE relkind = 'r' )
SELECT
s.fqname AS sequence,
'->' as depends,
t.fqname AS table
FROM
pg_depend d JOIN sequences s ON s.oid = d.objid
JOIN tables t ON t.oid = d.refobjid
WHERE
d.deptype = 'a' ;
配列情報:最大値
SELECT * FROM information_schema.sequences;
配列情報:終値
SELECT * FROM <sequence_name>
この投稿は古いものの、この溶液による CMS するものとして有用な私は使用しませんでしたが、自動へのリンク、シーケンスのテーブルの列を決めた。の利用 pg_depend カタログテーブルのカギとなっていました。私は拡大したいと思っている:
WITH fq_objects AS (SELECT c.oid,n.nspname || '.' ||c.relname AS fqname ,
c.relkind, c.relname AS relation
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace ),
sequences AS (SELECT oid,fqname FROM fq_objects WHERE relkind = 'S'),
tables AS (SELECT oid, fqname FROM fq_objects WHERE relkind = 'r' )
SELECT
s.fqname AS sequence,
'->' as depends,
t.fqname AS table,
a.attname AS column
FROM
pg_depend d JOIN sequences s ON s.oid = d.objid
JOIN tables t ON t.oid = d.refobjid
JOIN pg_attribute a ON a.attrelid = d.refobjid and a.attnum = d.refobjsubid
WHERE
d.deptype = 'a' ;
このバージョンの追加カラムのリストの分野を返します。両方のテーブル名やカラム名を手に呼び出すと、 pg_set_serial_sequence この辺りの全塩基配列、アミノ酸配列のデータベース設定します。例えば:
CREATE OR REPLACE FUNCTION public.reset_sequence(tablename text, columnname text)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
_sql VARCHAR := '';
BEGIN
_sql := $$SELECT setval( pg_get_serial_sequence('$$ || tablename || $$', '$$ || columnname || $$'), (SELECT COALESCE(MAX($$ || columnname || $$),1) FROM $$ || tablename || $$), true)$$;
EXECUTE _sql;
END;
$function$;
武器agiは、dexで下がらないboxerぐ人にリセット配列!
一部の試験がうほぼ完了します。
select *
from (select n.nspname,c.relname,
(select substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
from pg_catalog.pg_attrdef d
where d.adrelid=a.attrelid
and d.adnum=a.attnum
and a.atthasdef) as def
from pg_class c, pg_attribute a, pg_namespace n
where c.relkind='r'
and c.oid=a.attrelid
and n.oid=c.relnamespace
and a.atthasdef
and a.atttypid=20) x
where x.def ~ '^nextval'
order by nspname,relname;
信用が原因である信用...でもリバース-エンジニアリングからSQLからログインによりdに知られるテーブルが並びます。いすきクリーナーもこんにちは、性能な関心事となっています。
のようなハックがしてみてください:
選択'select"'||relname||"として配列last_valueから'||relname||'union" からpg_catalog.pg_class c C.relkind('S',");
削除前連合(EU)と実行結果
改善前の答え:
select string_agg('select sequence_name, last_value from ' || relname, chr(13) || 'union' || chr(13) order by relname)
from pg_class where relkind ='S'
この計算書リストテーブルのカラムはそれぞれのシーケンス
コード:
SELECT t.relname as related_table,
a.attname as related_column,
s.relname as sequence_name
FROM pg_class s
JOIN pg_depend d ON d.objid = s.oid
JOIN pg_class t ON d.objid = s.oid AND d.refobjid = t.oid
JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum)
JOIN pg_namespace n ON n.oid = s.relnamespace
WHERE s.relkind = 'S'
AND n.nspname = 'public'
りこちらをご参照 リンクへの回答
取得し配列によりそれぞれの列の各テーブル経由での解析がデフォルトを提供しています。この方法を提供 情報をカラム配列をリンク を使用しておりません 依存関係 が存在しない一部のdnaの塩基配列を決定した。も pg_get_serial_sequence(sch.nspname||'.'||tbl.relname, col.attname)
機能発見 ないすべて 配列ってくれました。
【解決
SELECT
seq_sch.nspname AS sequence_schema
, seq.relname AS sequence_name
, seq_use."schema" AS used_in_schema
, seq_use."table" AS used_in_table
, seq_use."column" AS used_in_column
FROM pg_class seq
INNER JOIN pg_namespace seq_sch ON seq_sch.oid = seq.relnamespace
LEFT JOIN (
SELECT
sch.nspname AS "schema"
, tbl.relname AS "table"
, col.attname AS "column"
, regexp_split_to_array(
TRIM(LEADING 'nextval(''' FROM
TRIM(TRAILING '''::regclass)' FROM
pg_get_expr(def.adbin, tbl.oid, TRUE)
)
)
, '\.'
) AS column_sequence
FROM pg_class tbl --the table
INNER JOIN pg_namespace sch ON sch.oid = tbl.relnamespace
--schema
INNER JOIN pg_attribute col ON col.attrelid = tbl.oid
--columns
INNER JOIN pg_attrdef def ON (def.adrelid = tbl.oid AND def.adnum = col.attnum) --default values for columns
WHERE tbl.relkind = 'r' --regular relations (tables) only
AND col.attnum > 0 --regular columns only
AND def.adsrc LIKE 'nextval(%)' --sequences only
) seq_use ON (seq_use.column_sequence [1] = seq_sch.nspname AND seq_use.column_sequence [2] = seq.relname)
WHERE seq.relkind = 'S' --sequences only
ORDER BY sequence_schema, sequence_name;
注1のスタートアップシーケンスで使用する複数のテーブルで表示されます。
おります。
ここでは、pl/pgsql機能する新規配列データベース化します。
---------------------------------------------------------------------------------------------------------
--- Nom : reset_sequence
--- Description : Générique - met à jour les séquences au max de l'identifiant
---------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION reset_sequence() RETURNS void AS
$BODY$
DECLARE _sql VARCHAR := '';
DECLARE result threecol%rowtype;
BEGIN
FOR result IN
WITH fq_objects AS (SELECT c.oid,n.nspname || '.' ||c.relname AS fqname ,c.relkind, c.relname AS relation FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace ),
sequences AS (SELECT oid,fqname FROM fq_objects WHERE relkind = 'S'),
tables AS (SELECT oid, fqname FROM fq_objects WHERE relkind = 'r' )
SELECT
s.fqname AS sequence,
t.fqname AS table,
a.attname AS column
FROM
pg_depend d JOIN sequences s ON s.oid = d.objid
JOIN tables t ON t.oid = d.refobjid
JOIN pg_attribute a ON a.attrelid = d.refobjid and a.attnum = d.refobjsubid
WHERE
d.deptype = 'a'
LOOP
EXECUTE 'SELECT setval('''||result.col1||''', COALESCE((SELECT MAX('||result.col3||')+1 FROM '||result.col2||'), 1), false);';
END LOOP;
END;$BODY$ LANGUAGE plpgsql;
SELECT * FROM reset_sequence();
こちらはもう一つのスキーマ名の横に配列名
select nspname,relname from pg_class c join pg_namespace n on c.relnamespace=n.oid where relkind = 'S' order by nspname
この機能はlast_valueの各シーケンスです。
出力し、2列テーブルのシーケンス名をスペシャル"ホットスポット最後の発生する。
drop function if exists public.show_sequence_stats();
CREATE OR REPLACE FUNCTION public.show_sequence_stats()
RETURNS TABLE(tablename text, last_value bigint)
LANGUAGE 'plpgsql'
COST 100
VOLATILE
ROWS 1000
AS $BODY$
declare r refcursor; rec record; dynamic_query varchar;
BEGIN
dynamic_query='select tablename,last_value from (';
open r for execute 'select nspname,relname from pg_class c join pg_namespace n on c.relnamespace=n.oid where relkind = ''S'' order by nspname';
fetch next from r into rec;
while found
loop
dynamic_query=dynamic_query || 'select '''|| rec.nspname || '.' || rec.relname ||''' "tablename",last_value from ' || rec.nspname || '.' || rec.relname || ' union all ';
fetch next from r into rec;
end loop;
close r;
dynamic_query=rtrim(dynamic_query,'union all') || ') x order by last_value desc;';
return query execute dynamic_query;
END;
$BODY$;
select * from show_sequence_stats();
仮に exec()
機能を宣言したこ https://stackoverflow.com/a/46721603/653539 配列とともに、最終値を取り出すことができるシク
select s.sequence_schema, s.sequence_name,
(select * from exec('select last_value from ' || s.sequence_schema || '.' || s.sequence_name) as e(lv bigint)) last_value
from information_schema.sequences s