Действительно ли возможно изменить естественный порядок столбцов в Пост-ГРЭС?

Здесь data и labels не определены.

Вы можете инициализировать data и labels, добавив

data = tf.random_uniform([1000, 32])
labels = tf.random_uniform([1000, 10])

перед dataset = tf.data.Dataset.from_tensor_slices((data, labels))

26
задан rjmunro 24 September 2008 в 10:39
поделиться

5 ответов

Можно на самом деле просто прямо изменить порядок столбцов, но я едва рекомендовал бы это, и необходимо быть очень осторожными, если Вы решаете сделать это.

, например,

# CREATE TABLE test (a int, b int, c int);
# INSERT INTO test VALUES (1,2,3);
# SELECT * FROM test;
 a | b | c 
---+---+---
 1 | 2 | 3
(1 row)

Теперь для хитрого бита, необходимо соединиться с базой данных с помощью пользователя пост-ГРЭС, таким образом, можно изменить системные таблицы.

# SELECT relname, relfilenode FROM pg_class WHERE relname='test';
 relname | relfilenode 
---------+-------------
 test_t  |       27666
(1 row)

# SELECT attrelid, attname, attnum FROM pg_attribute WHERE attrelid=27666;
 attrelid | attname  | attnum 
----------+----------+--------
    27666 | tableoid |     -7
    27666 | cmax     |     -6
    27666 | xmax     |     -5
    27666 | cmin     |     -4
    27666 | xmin     |     -3
    27666 | ctid     |     -1
    27666 | b        |      1
    27666 | a        |      2
    27666 | c        |      3
(9 rows)

attnum является уникальным столбцом, таким образом, необходимо использовать временную ценность при изменении номеров столбцов как таковых:

# UPDATE pg_attribute SET attnum=4 WHERE attname='a' AND attrelid=27666;
UPDATE 1
# UPDATE pg_attribute SET attnum=1 WHERE attname='b' AND attrelid=27666;
UPDATE 1
# UPDATE pg_attribute SET attnum=2 WHERE attname='a' AND attrelid=27666;
UPDATE 1

# SELECT * FROM test;
 b | a | c 
---+---+---
 1 | 2 | 3
(1 row)

Снова, потому что это играет вокруг с таблицами системы баз данных, соблюдают экстремальную осторожность, если Вы чувствуете, что действительно необходимо сделать это.

Это работает с пост-ГРЭС 8.3 с предыдущими версиями, Ваш milage может варьироваться.

22
ответ дан 28 November 2019 в 07:04
поделиться

Если Ваша база данных не является очень большой, и можно предоставить некоторое время простоя тогда, Вы можете:

  1. Отключают доступ для записи к базе данных
    , это важно как иначе, какие-либо изменения после запуска следующего вопроса будут потеряны
  2. pg_dump --create --column-inserts databasename > databasename.pgdump.sql
  3. Редактирование, соответствующее CREATE TABLE оператор в databasename.pgdump.sql
    , Если файл будет слишком большим для Вашего редактора, просто разделяет его с помощью split команда, редактирование, то собирают назад использование cat
  4. drop database databasename
    , у Вас действительно есть недавнее резервное копирование, на всякий случай, не так ли?
  5. psql --single-transaction -f databasename.pgdump.sql
    , Если Вы не используете --single-transaction, это будет очень медленно

при использовании так называемых больших объектов, удостоверяются, что они включены в дамп. Я не уверен, находятся ли они по умолчанию в 8,1.

16
ответ дан 28 November 2019 в 07:04
поделиться

Как другие упомянутые ответы, Вы не можете изменить порядок столбцов, это до пост-ГРЭС. Вы можете (и если!) решают Вашу проблему с целью. В целях Вашего запроса создания отчетов это посмотрит точно так же, как таблица. Что-то как:

create view my_view as
  select * from my_table
  order by some_col;
4
ответ дан 28 November 2019 в 07:04
поделиться

Определение порядка столбцов в запросе является единственным надежным (и нормальный) путь . Однако можно обычно получать различное упорядочивание путем изменения таблицы как показано в примере ниже, как столбцы обычно (не гарантируемый быть), возвратился в порядке, они были добавлены к таблице.

postgres=# create table a(a int, b int, c int);
CREATE TABLE
postgres=# insert into a values (1,2,3);
INSERT 0 1
postgres=# select * from a;
 a | b | c
---+---+---
 1 | 2 | 3
(1 row)

postgres=# alter table a add column a2 int;
ALTER TABLE
postgres=# select * from a;
 a | b | c | a2
---+---+---+----
 1 | 2 | 3 |
(1 row)

postgres=# update a set a2 = a;
UPDATE 1
postgres=# alter table a drop column a;
ALTER TABLE
postgres=# alter table a rename column a2 to a;
ALTER TABLE
postgres=# select * from a;
 b | c | a
---+---+---
 2 | 3 | 1
(1 row)

postgres=#
1
ответ дан 28 November 2019 в 07:04
поделиться

К сожалению, нет, это не. Порядок столбцов полностью до Пост-ГРЭС.

0
ответ дан 28 November 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: