vle*_*bar 102 mysql postgresql sql
SHOW CREATE TABLEPostgres 中是否有相当于 MySQL 的版本?这可能吗?如果不是,下一个最佳解决方案是什么?
我需要该语句,因为我使用它在远程服务器上(通过 WCF)创建表。
alv*_*osu 66
pg_dump:
pg_dump -st tablename dbname
Run Code Online (Sandbox Code Playgroud)
或使用 PostgreSQL GUI 工具(pgAdmin、phpPgAdmin 等)
小智 36
您可以尝试在 PostgreSQL 日志文件中跟踪pg_dump --table table --schema-only真正做了什么。然后就可以用同样的方法编写自己的sql函数了。
小智 26
在命令行 ( psql) 中,您可以运行:\d <table name>列出所有列、它们的类型和索引。
Eog*_*anM 14
基于@CubicalSoft 答案的第一部分,您可以添加以下函数,该函数应该适用于简单表(假设默认的“公共”模式并省略约束、索引和用户定义的数据类型等)。@RJS 回答是目前正确执行此操作的唯一方法;这是应该内置到 psql 中的东西!
CREATE OR REPLACE FUNCTION show_create_table(table_name text, join_char text = E'\n' )
RETURNS text AS
$BODY$
SELECT 'CREATE TABLE ' || $1 || ' (' || $2 || '' ||
string_agg(column_list.column_expr, ', ' || $2 || '') ||
'' || $2 || ');'
FROM (
SELECT ' ' || column_name || ' ' || data_type ||
coalesce('(' || character_maximum_length || ')', '') ||
case when is_nullable = 'YES' then '' else ' NOT NULL' end as column_expr
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = $1
ORDER BY ordinal_position) column_list;
$BODY$
LANGUAGE SQL STABLE;
Run Code Online (Sandbox Code Playgroud)
Cub*_*oft 10
我意识到我参加这个聚会有点晚了,但这是我的 Google 搜索的第一个结果,所以我想我会回答我的想法。
您可以通过此查询获得非常远的解决方案以获取列:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
Run Code Online (Sandbox Code Playgroud)
然后是对最常见索引的查询:
SELECT c.oid, c.relname, a.attname, a.attnum, i.indisprimary, i.indisunique
FROM pg_index AS i, pg_class AS c, pg_attribute AS a
WHERE i.indexrelid = c.oid AND i.indexrelid = a.attrelid AND i.indrelid = 'YOURSCHEMA.YOURTABLE'::regclass
ORDER BY" => "c.oid, a.attnum
Run Code Online (Sandbox Code Playgroud)
然后就是以正确的格式构建查询字符串的问题。
| 归档时间: |
|
| 查看次数: |
106176 次 |
| 最近记录: |